EsgynDB 存储过程SP/SQL

2022-06-30 00:00:00 创建 调用 方式 存储过程 采用

EsgynDB的新版本支持存储过程SP/SQL,语法与Oracle的PL/SQL大部分兼容。

语法

CREATE OR REPLACE PROCEDURE <PROCEDURE NAME>
(
[IN in_param param_type,...]
[OUT ou_param param_type,...]
)
IS
DECLARE
param1 param_type;
...
BEGIN
...
EXCEPTION
WHEN OTHERS THEN
...
END <PROCEDURE NAME>;

创建方式

因为存储过程内部一般是包含多条语句,存储过程定义中会有多个分号,因此存储过程的创建不能像一般SQL那样可以用分号作为结束符,因此我们采用 / 作为存储过程创建的结束符,以下是一个在Trafci中创建简单存储过程的示例,后的"/"代表存储过程创建结束符。

CREATE OR REPLACE PROCEDURE TEST_PROC
(
IN V_DATE VARCHAR(100),
OUT V_RETCODE INT,
OUT V_RETMSG VARCHAR(200) CHARACTER SET UTF8
)
IS
DECLARE
P_DATE VARCHAR(10);
BEGIN
P_DATE := V_DATE;
EXECUTE IMMEDIATE 'DROP TABLE IF EXISTS TEST_TBL';
EXECUTE IMMEDIATE 'CREATE TABLE TEST_TBL(DT VARCHAR(100))';
INSERT INTO TEST_TBL VALUES(P_DATE);
EXCEPTION
WHEN OTHERS THEN
V_RETCODE := SQLCODE;
V_RETMSG := '错误信息:'||SQLERRM;
END TEST_PROC;
/

调用方式

调用方式我们采用CALL命令,对于上述示例存储过程的调用语句如下,

CALL TEST_PROC('2019-09-17',?,?);

以上采用?来代替OUT参数,表示匿名出参的意思,样例输出如下,

SQL>CALL TEST_PROC('2019-09-17',?,?);

V_RETCODE V_RETMSG
----------- --------------------------------------------------------------------------------------------------------------------------------
NULL NULL

--- SQL operation complete.

我们也可以采用指定参数名调用方式,

set param ?a NULL;
set param ?b NULL;
CALL TEST_PROC('2019-09-17',?a,?b);
SELECT ?a,?b FROM DUAL;

相关文章