Oracle总结之plsql编程(基础八)

原创做品,转自请注明出处:https://www.cnblogs.com/sunshine5683/p/10328524.htmlhtml

 

1、函数sql

    一、函数是能够返回一个特定的数据,函数的建立中必须包含return子句。数组

    二、函数建立:app

    create function sp_function2(spname varchar2) return number  is salaries  number(7,3);函数

    begin oop

    ----执行部分fetch

    select sal*10+nvl(comm,0)*10 into salaries from emp where ename=spname;spa

    return salares;scala

    end;指针


    三、在sqlplus中调用函数

    var xhq_salaries number

    call sp_function2('SCOTT') into :xhq_salaries;

    

 

2、包

    一、包是用于逻辑上组合过程和函数的,能够使用create package命令建立一个包。

    如:

    create package sp_package is

        procedure update_sal(name varchar2,newsal number);

        function sp_function2(name varchar2) return number;

    end;

    

二、建立包体

    create or replace package body sp_package is

procedure update_sal(name varchar2,newsal number) is

begin

update emp set sal=newsal where ename=name;

end;

function sp_function2(name varchar2) return number is

salaries number;

begin

select sal into salaries from emp where ename=name;

return salaries;

end;

end;  

三、调用包的函数或过程

exec sp_package.update_sal('SMITH',120);


 

3、plsql变量

一、标量类型(scalar)

标量包含许多类型,此处介绍经常使用类型就能够

如:

定义一个边长字符串: v_ename varchar2(20);

定义一个小数 ,范围-99.99~99.99:    v_sal  number(4,2);

定义一个小数并给一个初始值: v_sal2  number(6,2):=1111.11

例子:

输入员工号,输出员工工资,姓名,我的所得税(税率为0.01)

declare

c_tax_rate number(3,2):=0.01;

v_ename varchar2(10);

v_sal number(7,2);

v_tax_sal number(7,2);

begin

select ename,sal into v_ename,v_sal from emp where empno=&no;

--计算所得税

v_tax_sal:=v_sal*c_tax_rate;

dbms_output.put_line('姓名为:'||v_ename||'工资:'||v_sal || '所得税:'||v_tax_sal);

end;


上面报错缘由是定义v_ename  varchar(5),但实际上返回的值大于定义的,因此报错,改为v_ename varchar(10),问题解决,正常执行。

 

标量使用%type类型:表面。列名%type

如上面:v_ename  emp.ename%type;这样定之后就会匹配大小,不会存在上述缓冲过小的错误,也不至于定义太大浪费空间。

 

二、复合类型(即plsql记录)

相似于高级语言中的结构体,使用:记录变量.记录成员.

三、复合类型之plsql表,至关于高级语言中的数组,区别是下标能够为负数,而在高级语言中是不能够为负数的。

四、参照变量:是指用于存放数值指针的变量,经过参照变量,能够使得应用程序共享相同对象,从而下降占用的空间,在编写plsql程序时,能够使用游标变量和对象变量两种参照变量,简单是用的最多的是游标变量。

    使用游标变量时,不须要指定相应的select语句,可是使用又表示,须要指定select语句。

    实例以下:

    declare
  type sp_emp_cursor is ref cursor;
  test_cursor sp_emp_cursor;
  --定义变量
  v_ename emp.ename%type;
  v_sal emp.sal%type;
   begin
   --吧test_cursor和一个select结合
   open test_cursor for select ename,sal from emp where deptno=&no;
   --循环取出查询出的数据
   --循环取出查询出的数据
  loop
    fetch test_cursor into v_ename,v_sal;
    exit when test_cursor%notfound;
    dbms_output.put_line('姓名:'||v_ename||'工资:'||v_sal);
   end loop;
   --关闭游标
   close test_cursor;
   end;


相关文章
相关标签/搜索