#存储过程

存储过程是数据库里的一种PL/SQL对象。

分布式部署中不支持存储过程。

# 创建存储过程

使用CREATE PROCEDURE语句创建存储过程,其语法定义为:

create procedure::=

syntax
CREATE OR REPLACE EDITIONABLE NONEDITIONABLE PROCEDURE procedure_head_clause IS AS procedure_body_clause ;

procedure_head_clause::=

syntax
schema . procedure_name ( argument_define , ) invoker_rights_clause

invoker_rights_clause::=

syntax
AUTHID CURRENT_USER DEFINER

procedure_body_clause::=

syntax
variable_declare BEGIN plsql_statements END procedure_name

# or replace

当要创建的存储过程已经存在时,将其进行重建。

# editionable | noneditionable

用于语法兼容,无实际含义。

# procedure_name

存储过程的名称,不可省略,且需符合YashanDB的对象命名规范

# argument_define

定义存储过程的参数(形参),可省略,此时procedure_name()=procedure_name。最多可以指定4095个参数。

PL/SQL参数描述

# invoker_rights_clause

首页invoker_rights_clause部分描述。

# variable_declare

声明PL/SQL过程体的全局变量,可省略。

PL/SQL变量描述

# plsql_statements

定义过程体中的执行语句,为PL/SQL语句中的一项或多项。

示例

CREATE OR REPLACE PROCEDURE ya_proc(i INT) IS
BEGIN
CASE i
WHEN 1 THEN
DBMS_OUTPUT.PUT_LINE('hello');
WHEN 2 THEN
DBMS_OUTPUT.PUT_LINE('world');
END CASE;
END ya_proc;
/

# 运行存储过程

# sql语句中调用

通过CALL、EXEC语句调用存储过程,其语法定义为:

syntax
CALL EXEC procedure_name ( arguments )

arguments为与argument_define一一对应的实参。

示例

exec ya_proc(1);

--result
hello

# 过程体中调用

格式为:procedure_name(arguments);

arguments为与argument_define一一对应的实参。

示例

BEGIN
  ya_proc(1);
  ya_proc(2);
END;
/

--result
hello
world

# 删除存储过程

使用DROP PROCEDURE语句删除存储过程。