--在应用程序中往往有些固定的数据库操作,我们常常为致谢固定的操作定义了一些存储过程。这些存储过程不仅 --可以简化客户端的应用程序的开发和维护。而且还可以提高应用的运行性能。 -- 创建存储过程的语法。 create [or replace] procedure <过程名>[(参数)] is|as [局部变量声明] begin 可执行语句 exception 异常处理 end --在定义中 IS|AS 可以根据习惯选择IS 或者AS 除了定义部分。其余的语法同PL/SQL的语法。 例: 。 -- 1 ①一个无参的存储过程。 create or replace procedure proc_1--proc_1存储过程名称 is i number(3);--定义变量 begin i:=100; dbms_output.put_line(i); end; --②调用存储过程。 begin proc_1; end; --一个无参数的存储过程创建完毕 2 一个有参数的存储过程 存储过程定义的时候可以使用参数也可以不实用参数。 参数类型 · 在PL/SQL过程中,可以有3种类型的参数。 · IN参数:读入参数,主程序向过程中传递参数。 · OUT参数:输出参数,过程向主程序传递参数。 · IN OUT参数:这个参数,过程与主程序双向交流数据。 如果存储过程有OUT 或者IN OUT 类型的参数,那么存储过程就只能在PL/SQL 中被调用。不能使用EXECUTE 或者CALL调用。 一个输入参数的例子 create or replace procedure proc_2(myno in number) is emprow emp%rowtype;--定义一个行类型的变量 begin select * into emprow from emp where empno=myno; dbms_output.put_line('员工姓名:'||emprow.ename||'员工薪水'||emprow.sal); end; --调用这个存储过程 begin proc_2(7369); end; 既有输入参数 又有输出参数 create or replace procedure proc_3(myno in number,mysal out emp.sal%type, myname out emp.ename%type) is emprow emp%rowtype; begin select sal,ename into mysal,myname from emp where empno=myno; end; --调用这个存储过程 declare tempsal emp.sal%type; empname emp.ename%type; begin proc_3(7369,tempsal,empname); dbms_output.put_line('员工姓名'||empname||'员工薪水'||tempsal); end; --编写函数 函数带有两个参数 然后 该函数返回这两个参数的和 函数使不能有输出参数 函数只能有输入参数 --函数有且只有一个返回值 create or replace function myadd(a number,b number) return number is re number(4); begin re:=a+b; return re; end; declare re number(4); begin re:=myadd(12,23); dbms_output.put_line(re); end; --函数还可以在sql语句调用 select myadd(22,232) from dual; select sysdate from dual; --编写函数 函数带有两个参数 然后 该函数返回这两个参数的和 函数使不能有输出参数 函数只能有输入参数 --函数有且只有一个返回值 create or replace function myadd(a number,b number) return number is re number(4); begin re:=a+b; return re; end; declare re number(4); begin re:=myadd(12,23); dbms_output.put_line(re); end; --函数还可以在sql语句调用 select myadd(22,232) from dual; select sysdate from dual; --oracle 包 就是对函数 或者过程 进行 封装 可以把相似的功能的函数 或者过程 放到一个包里面 --以后访问这些过程 或者函数的 时候 就需要通过包来进行访问 --oracle 包的定义 包括两块 1 包头 2 包体 --1 包头 是包里面内容的定义 类似于java中的接口 --2 包体 负责包头里面那些对象的实现 --1.定义包头 create or replace package mypak as a number(4); b number(4); --定义包里面包含那些对象(过程 函数 游标。。。) procedure proc_1; function myadd return number ; end; --2 包头里面的对象的实现 由包体来具体编写 create or replace package body mypak as procedure proc_1 is i number(3); --定义变量 begin a:=100; i:=100; dbms_output.put_line(i||' '||a); end proc_1; function myadd return number is re number(4); begin re:=a+b; return re; end myadd ; end mypak; --调用包里面的过程 或者函数 begin --mypak.proc_1; mypak.a:=20; mypak.b:=110; dbms_output.put_line(mypak.myadd); --调用系统的包里面的过程 来输出值的 end;