oracle学习笔记15--PLSQL2
包
包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。
我们可以使用create package命令来创建包
create package morf_package isprocedure update_sal(name varchar2,newSal number);function annual_income(name varchar2) return number;end;
create or replace package body morf_package isprocedure update_sal(name varchar2,newSal number) isbeginupdate emp set sal=newSal where ename=name;end;function annual_income(name varchar2) return number isannual_salary number;beginselect sal*12+nvl(comm.,0) into annual_salary from emp where ename=name;return annual_salary;end;end;
--标量的使用declare --定义了一个常量而且有初始值c_tax_rate number(3,2):=0.03;--定义了三个变量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;
declare--先定义一个记录类型emp_record_type,--该类型包含三个数据,name,salary,titletype emp_record_type is record(name emp.ename%type,salary emp.sal%type,title emp.job%type);--定义了一个变量morf_record,其类型是emp_record_typemorf_record emp_record_type;beginselect ename,sal,job into morf_record from emp where empno=7788;dbms_output.put_line(‘员工名:’||morf_record.name);end;
declaretype morf_table_type is table of emp.ename%type index by binary_integer;morf_table morf_table_type;beginselect ename into morf_table(0) from emp where empno=7788;dbms_output.put_line(‘员工名:’|| morf_table(0));end;
--游标的使用declare--声明一个游标类型name_cursor_typetype name_cursor_type is ref cursor;--定义一个游标变量name_cursorname_cursor name_cursor_type;v_ename emp.ename%type;v_sal emp.sal%type;begin--打开游标open name_cursor for select ename,sal from emp where deptno=&no;loop--循环取出内容fetch name_cursor into v_ename,v_sal;--判断游标是否为空exit when name_cursor%notfound;dbms_output.put_line('姓名:'||v_ename||'工资:'||v_sal);end loop;end;