1.存储过程
存储过程是一段存储在数据库中执行某块业务功能的程序模块,它由一段或多段的PLSQL代码块或者SQL语句组成,存储在数据库中,并通过输入、输出参数或输入/输出参数与其调用者交换信息。
--创建存储过程 create or replace procedure 存储过程名称(参数 in|out|in out 参数类型) is begin plsql代码块; end --存储过程的调用 在plsql块中调用 call命令调用: call 名字(); --存储过程的删除 drop procedure 名称;
参数的三种模式:
IN 用于接受调用程序的值。默认的参数模式
OUT 用于向调用程序返回值
IN OUT 用于接受调用程序的值,并向调用程序返回更新的值
--创建一个存储过程,以员工号为参数,输出该员工的工资 create or replace procedure p1(e1 in number) is esal emp.sal%type; begin select sal into esal from emp where empno=e1; dbms_output.put_line(esal); end; --创建一个存储过程,以员工号为参数,返回该员工的工作年限(以参数形式返回)。 create or replace procedure p3(e1 in number,h1 out number) is begin select floor(months_between(sysdate,hiredate)/12) into h1 from emp where empno=e1; dbms_output.put_line(h1); end; --编写过程,实现交换两个变量的值的功能。并输出交换前和交换后的两个值。 create or replace procedure p11(x1 in out number,x2 in out number) is z number; begin dbms_output.put_line(x1||','||x2); z:=x1; x1:=x2; x2:=z; dbms_output.put_line(x1||','||x2); end;
2.函数
函数是通过关键字function按照需求把复杂的业务逻辑封装进PLSQL函数中,提供一个返回值给使用者。
--创建函数 create or replace function 函数名称(参数 数据类型) return 返回值类型 is begin plsql代码块; return 返回值; end; --创建一个函数,以员工号为参数,返回该员工所在的部门的平均工资。 create or replace function f3(e1 number) return number is d1 number; x number; begin select deptno into d1 from emp where empno=e1; select avg(sal) into x from emp where deptno=d1; return x; end;