CREATE PROCEDURE
 语法格式
 CREATE [ OR REPLACE ] PROCEDURE procedure_name
 [ ( {[ argmode ] [ argname ] argtype [ { DEFAULT | := | = } expression ]}[,…]) ]
 [
 { IMMUTABLE | STABLE | VOLATILE }
 | { SHIPPABLE | NOT SHIPPABLE }
 | {PACKAGE}
 | [ NOT ] LEAKPROOF
 | { CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }
 | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER}
 | COST execution_cost
 | ROWS result_rows
 | SET configuration_parameter { [ TO | = ] value | FROM CURRENT }
 ][ … ]
 { IS | AS }
 plsql_body
 /
参数说明
 •OR REPLACE
 当存在同名的存储过程时,替换原来的定义。
•procedure_name
 创建的存储过程名字,可以带有模式名。
 取值范围:字符串,要符合标识符的命名规范。
•argmode
 参数的模式。
VARIADIC用于声明数组类型的参数。
 取值范围: IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的过程定义中。
•argname
 参数的名字。
 取值范围:字符串,要符合标识符的命名规范。
•argtype
 参数的数据类型。
 取值范围:可用的数据类型。
•IMMUTABLE、STABLE等
 行为约束可选项。各参数的功能与CREATE FUNCTION类似,详细说明见5.18.17.13-CREATE FUNCTION
•plsql_body
 PL/SQL存储过程体。
当在存储过程体中进行创建用户等涉及用户密码相关操作时,系统表及csv日志中会记录密码的明文。因此不建议用户在存储过程体中进行涉及用户密码的相关操作。
 argument_name和argmode的顺序没有严格要求,推荐按照argument_name、argmode、argument_type的顺序使用。
示例
--创建存储过程:
CREATE PROCEDURE ypg_output2(tabname varchar)
as
begindbms_output.put_line(tabname);
end;
/--调用存储过程:
select ypg_output2('xxx');
call ypg_output2('xxx');--删除一个存储过程。
DROP PROCEDURE ypg_output2;