首页 > 数据库 > > SQL语法-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
/
当存在同名的存储过程时,替换原来的定义。
创建的存储过程名字,可以带有模式名。
取值范围:字符串,要符合标识符的命名规范。
参数的模式。

VARIADIC用于声明数组类型的参数。
取值范围: IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的过程定义中。
参数的名字。
取值范围:字符串,要符合标识符的命名规范。
参数的数据类型。
取值范围:可用的数据类型。
行为约束可选项。各参数的功能与CREATE FUNCTION类似,详细说明见5.18.17.13-CREATE FUNCTION
PL/SQL存储过程体。

当在存储过程体中进行创建用户等涉及用户密码相关操作时,系统表及csv日志中会记录密码的明文。因此不建议用户在存储过程体中进行涉及用户密码的相关操作。
说明:argument_name和argmode的顺序没有严格要求,推荐按照argument_name、argmode、argument_type的顺序使用。
--创建一个存储过程。
CREATE OR REPLACE PROCEDURE prc_add
(
param1 IN INTEGER,
param2 IN OUT INTEGER
)
AS
BEGIN
param2:= param1 + param2;
dbms_output.put_line('result is: '||to_char(param2));
END;
/
--调用此存储过程。
SELECT prc_add(2,3);
--创建一个参数模式为VARIADIC的存储过程。
CREATE OR REPLACE PROCEDURE pro_variadic (var1 VARCHAR2(10) DEFAULT 'hello!',var4 VARIADIC int4[])
AS
BEGIN
dbms_output.put_line(var1);
END;
/
--执行此存储过程。
SELECT pro_variadic(var1=>'hello', VARIADIC var4=> array[1,2,3,4]);
--创建一个存储过程,将带着调用它的用户的权限执行。
CREATE PROCEDURE insert_data(v integer)
SECURITY INVOKER AS BEGIN
INSERT INTO tb1 VALUES(v);
END; /
--调用此存储过程。
CALL insert_data1(1);
--创建带有package属性的存储过程。
create or replace procedure package_func_overload(col int, col2 out varchar)
package
as
declare
col_type text;
begin
col2 := '122';
dbms_output.put_line('two varchar parameters ' || col2);
end;
/
--删除一个存储过程。
DROP PROCEDURE prc_add;
DROP PROCEDURE pro_variadic;
DROP PROCEDURE insert_data;
DROP PROCEDURE package_func_overload;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3140014/ ,如需转载,请注明出处,否则将追究法律责任。