--=====================
-- PL/SQL --> 存储过程
--=====================
存储过程子程序的一种类型,能够完成一些任务,作为schema对象存储于数据库。是一个有名字的PL/SQL代码块,支持接收或不接受参数
,同时也支持参数输出。一个存储过程通常包含定于部分,执行部分,Exception部分,可以被其他子程序调用,也可以被重用。
一、过程定义
CREATE [OR REPLACE]PROCEDURE procedure_name
[(argument_name [IN | OUT | IN OUT] argument_type)]
AS | IS
BEGIN
procedure_body;
END [procedure_name];
存储过程中参数的类型
IN:表示是一个输入参数,可以指定缺省值。如省略参数类型,则缺省为in类型
OUT:表示是一个输出参数
IN OUT:既可以作为一个输入参数,也可以作为一个输出参数来输出结果
二、过程调用
EXECUTE |CALL procedure_name [(argument_list)]
--例:定义一个过程,以JOB为参数,查询该JOB的最高工资、最低工资、平均工资。
CREATE OR REPLACE PROCEDURE display_sal(v_job emp.job%TYPE) --该形参缺省为in类型,数据类型为emp.job%TYPE
AS
v_avg_sal emp.sal%TYPE;
v_max_sal emp.sal%TYPE;
v_min_sal emp.sal%TYPE;
BEGIN
SELECT avg(sal) INTO v_avg_sal FROM emp WHERE job=v_job;
SELECT max(sal) INTO v_max_sal FROM emp WHERE Job=v_job;
SELECT min(sal) INTO v_min_sal FROM emp WHERE job=v_job;
DBMS_OUTPUT.PUT_LINE('DEPT '||v_job||' avg sal:'||v_avg_sal);
DBMS_OUTPUT.PUT_LINE('DEPT '||v_job||' max sal:'||v_max_sal);
DBMS_OUTPUT.PUT_LINE('DEPT '||v_job||' min sal:'||v_min_sal);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('NOT FOUND RECORD!');
END display_sal;
/
scott@ORCL> set serveroutput on;
scott@ORCL> exec display_sal('SALESMAN');
DEPT SALESMAN avg sal:1400
DEPT SALESMAN max sal:1600