资源描述:
《PLSQL创建存储过程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、子程序的介绍:•命名的 PL/SQL 块,能够接受传递的参数,能够被调用。•子程序的类型 过程:用于执行某项操作 函数:用于执行某项操作并返回值•基于标准的PL/SQL块结构 声明部分 可执行部分 异常部分(可选)优点:–模块化将程序分解为多个逻辑模块–可重用性子程序在被执行之后,被存储在数据库中,可以在任意数目的应用程序中使用–可维护性 子程序简化了维护–提高性能用户直接使用共享池中解析后的程序存储过程:•命名的PL/SQL块•能够接受参数•能够被重复调用•用于执行某项操作•存储在数据库中形式参数与实际
2、参数形式参数:在子程序说明的参数列表中声明的变量 CREATEPROCEDUREraise_sal( p_idNUMBER, p_amountNUMBER) ... ENDraise_sal;•实际参数:在子程序被调用的参数列表中引用的变量或表达式 raise_sal(v_id,2000)创建带参数的过程参数模式IN是默认的参数模式。换句话说,如果未指定一个参数的模式,该参数就被认为是一个IN参数。参数模式OUT和INOUT必须在参数的前面被明确指定。一个IN模式的形式参数不能被指定一个值,就是说,一个
3、在过程体中的IN参数不能被修改。一个OUT或INOUT参数在返回主叫环境之前必须被指定一个值。IN参数可以在参数列表中被指定一个默认值。OUT和INOUT参数不能被指定默认值。默认情况下IN参数是引用传递,而OUT和INOUT参数是值传递。1.create or replace procedure raise_sal 2.(p_id in emp.empno%type, 3. p_name out varchar2, 4. p_sal out number) 1. Is 2. be
4、gin 3. select sal,ename into p_sal,p_name 4. from emp 5. where empno = p_id; 6.end raise_sal; 1.DECLARE 2. v_sal emp.sal%type; 3. v_name emp.ename%type; 4.BEGIN 5. raise_sal(7369,v_sal,v_name); 6. dbms_output.put_line('雇员:'
5、
6、
7、v_name
8、
9、'的薪水是 '
10、
11、v_sal); 7.END; 声明主机变量,执行raise_sal过程1.VARIABLE g_sal NUMBER 2.VARIABLE g_name VARCHAR2(25) 3.EXEC raise_sal(7369,:g_name,:g_sal) 用VARIABLE命令创建主机变量。调用raise_sal过程,提供这些主机变量作为OUT参数。在EXECUTE命令中引用主机变量时,注意冒号(:)的使用。 传递参数的方法•位置:实际参数与形式参数排列的顺序相
12、同•指定:实际参数联合其相应的形式参数以任意顺序排列•组合:实际参数的排列一些用位置,一些用指定 1.CREATE OR REPLACE PROCEDURE raise_sal 2.(p_id IN emp.empno%type default 7369, 3. p_name OUT varchar2 , 4. p_sal IN OUT number ) 5.IS 1.BEGIN 2. UPDATE emp 3. SET sal = sal + p_sal
13、 4. WHERE empno = p_id; 5. 6. SELECT sal,ename INTO p_sal,p_name 7. FROM emp 8. WHERE empno = p_id; 9.END raise_sal; 异常处理:当一个异常发生时,控制立即转向块的异常部分。如果异常被处理,块终止运行,并且控制转向主叫程序。1.CREATE OR REPLACE PROCEDURE test1 2.IS 3. v_deptno
14、 dept.deptno%type; 4.BEGIN 5. insert into dept values(60,'nuc','kitty'); 6. select deptno into v_deptno from dept 7. where deptno=99; 8.EXCEPTION 9. WHEN NO_DATA_FOUND THEN 10.