最下方
PL/SQL块分为匿名块与命名块,命名块又包含子程序、包和触发器。
过程和函数统称为PL/SQL子程序,我们可以将商业逻辑、企业规则写成过程或函数保存到数据库中,以便共享。
过程和函数均存储在数据库中,并通过参数与其调用者交换信息。过程和函数的唯一区别是函数总向调用者返回数据,而过程不返回数据。
1. 存储过程概念
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中。经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
2. 创建过程
语法:
1 CREATE [ OR REPLACE ] PROCEDURE [ schema. ] procedure_name
2 [ ( parameter_declaration [, parameter_declaration ]... ) ]
3 [ invoker_rights_clause ]
4 { IS AS }
5 { [ declare_section ] body call_spec EXTERNAL} ;
说明:
procedure_name:过程名称。
parameter_declaration:参数声明,格式如下:
parameter_name [ [ IN ] datatype [ { := DEFAULT } expression ]
{ OUT IN OUT } [ NOCOPY ] datatype IN:输入参数。
OUT:输出参数。
IN OUT:输入输出参数。
invoker_rights_clause:这个过程使用谁的权限运行,格式:
AUTHID { CURRENT_USER DEFINER }declare_section:声明部分。
body:过程块主体,执行部分。
一般只有在确认procedure_name过程是新过程或是要更新的过程时,才使用OR REPALCE关键字,否则容易删除有用的过程。
示例1:
1 CREATE PROCEDURE remove_emp (employee_id NUMBER) AS
2 tot_emps NUMBER;
3 BEGIN
4 DELETE FROM employees
5 WHERE employees.employee_id = remove_emp.employee_id;
6 tot_emps := tot_emps - 1;
7 END;
示例2:
1 CREATE OR REPLACE PROCEDURE insert_emp(
2 v_empno in employees.employee_id%TYPE,
3 v_firstname in employees.first_name%TYPE,
4 v_lastname in employees.last_name%TYPE,
5 v_deptno in employees.department_id%TYPE
6 )
7 AS
8 empno_remaining EXCEPTION;
9 PRAGMA EXCEPTION_INIT(empno_remaining, -1);
10 BEGIN
11 INSERT INTO EMPLOYEES(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE,DEPARTMENT_ID)
12 VALUES(v_empno, v_firstname,v_lastname, sysdate, v_deptno);
13 DBMS_OUTPUT.PUT_LINE(\\\\'插入成功!\\\\');
14 EXCEPTION
15 WHEN empno_remaining THEN
16 DBMS_OUTPUT.PUT_LINE(\\\\'违反数据完整性约束!\\\\');
17 DBMS_OUTPUT.PUT_LINE(SQLCODE\\\\'---\\\\'SQLERRM);
18 WHEN OTHERS THEN
19 DBMS_OUTPUT.PUT_LINE(SQLCODE\\\\'---\\\\'SQLERRM);
20 END;
3. 使用过程参数
当建立过程时,既可以指定过程参数,也可以不提供任何参数。
过程参数包括输入参数、输出参数和输入输出参数,其中输入参数(IN)用于接收调用环境的输入数据,输出参数(OUT)用于将输
本号回复:公交车
领取专属 10元无门槛券
私享最新 技术干货