CREATEORREPLACEPROCEDURE find_emp(emp_no inNUMBER) -- in 可不指明,默认表示 emp_no 为入参 AS empname VARCHAR2(20); BEGIN SELECT ename INTO empname FROM EMP WHERE empno = emp_no; DBMS_OUTPUT.PUT_LINE('雇员姓名是 '|| empname); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE ('雇员编号未找到'); END find_emp; /
参数列表为 IN 类型参数的存储过程,可以有 SQLPLUS 直接调用和通过 PL/SQL 块调用两种调用方式,示例如下:
1 2 3 4 5 6
exec find_emp(7782); -- sqlplus 直接执行
begin-- PL/SQL 块执行 find_emp(7782); end; /
2.1 参数和调用
参数不能有具体精度,比如 number(8) ,varchar(20) 等。
存储过程参数的三种模式:
IN
用于接受调用程序的值
默认的参数模式
OUT
用于向调用程序返回值
IN OUT
用于接受调用程序的值,并向调用程序返回更新的值
由于前面已经举例了 IN 类型参数的示例,下面分别来举例 OUT 类型和 IN OUT 类型参数的示例。
2.1.1 OUT 参数
1 2 3 4 5 6 7
createorreplaceprocedure proc_out(numoutnumber) as begin num := 100; --DBMS_OUTPUT.PUT_LINE(num); end; /
参数列表为 OUT 类型参数的存储过程不同于 IN 类型,只能通过 PL/SQL 块来调用执行,示例如下:
1 2 3 4 5 6 7 8
declare k number; begin proc_out(k); -- 调用存储过程,k 即为 proc_out 的 num 参数 DBMS_OUTPUT.PUT_LINE('proc_out 存储过程的执行结果:' || k); end; / proc_out 存储过程的执行结果:100 -- 执行结果