EsgynDB 存储过程SP/SQL

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;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值