-----------------------------------------------
A,使用存储过程参数
-----------------------------------------------
定义语法:
CREATE [OR REPLACE] PROCEDURE procedure_name
(arg1 [mode1] type1 [default default_value], arg2 [mode2] type2, ...)
IS [AS]
PL/SQL Block;
说明:
在定义参数时,只能指定数据类型,不能指定长度。
参数类型为IN(默认),OUT,IN OUT三种。
使用集合类型作为返回值时,需要使用自定义的嵌套表类型或者VARRAY类型。
存储过程示例:
CREATE OR REPLACE PROCEDURE out_time
IS
BEGIN
DBMS_SESSION.set_nls ('NLS_DATE_FORMAT', '''YYYY-MM-DD HH24:MI:SS''');
DBMS_OUTPUT.put_line (SYSDATE);
END;
/
-----------------------------------------------
B,调用存储过程
-----------------------------------------------
在SQL*Plus中调用过程时,需要使用CALL或者EXECUTE命令;而在PL/SQL块中过程可以直接引用。
exec procedure_name()
参数传递:位置传递,名称传递,组合传递。
exec procedure_name('arg1_value', arg2=>'arg2_value')
-----------------------------------------------
C,维护存储过程
-----------------------------------------------
第一,删除过程
DROP PROCEDURE procedure_name;
第二,显示编译错误
方法一:执行命令
SHOW errors
方法二:查询数据字典
SELECT *
FROM user_errors;
第三,确定过程状态
当使用ALTER TABLE命令改变表结构时,会将基本该表的子程序状态改为INVALID状态。使用下面的语句可以查询对象的状态,
SELECT *
FROM user_objects;
第四,编译过程
为了避免过程的运行时错误,应该重新编译处于INVALID状态的过程。
ALTER PROCEDURE procedure_name COMPILE;
编译函数:
ALTER FUNCTION procedure_name COMPILE;
第五,查看过程代码
查询数据字典USER_SOURCE,可以获得子程序名称以及源代码。
SELECT *
FROM user_source t
WHERE t.NAME = 'OUT_TIME';