lightdb plorasql存储过程支持SQLCODE和SQLERRM

文章目录

背景

LightDB PLOraSQL存储过程在执行异常时支持通过sqlcode和sqlerrm拿到错误码和错误信息,这点与Oracle是类似的。但是在Oracle中存储过程未执行异常也能获取到错误码和错误信息,而LightDB会找不到对应的变量。因此计划在24.2版本对该行为进行支持。

用法

在非异常块下的sqlcode和sqlerrm访问

BEGIN
     DBMS_OUTPUT.PUT_LINE('sqlcode:' || sqlcode );
     DBMS_OUTPUT.PUT_LINE('sqlerrm:' || sqlerrm );
END;
/

sqlcode:0
sqlerrm:ORA-0000
DO

在非异常块下sqlcode和sqlerrm访问

DECLARE
    errcode1 int;
    errcode2 int;
    errcode3 int;
    errcode4 int;
    errmsg1  varchar(255);
    errmsg2  varchar(255);
    errmsg3  varchar(255);
    errmsg4  varchar(255);
BEGIN	
    DECLARE
    	v_exception1 EXCEPTION;
    	v_exception2 EXCEPTION;
     	PRAGMA EXCEPTION_INIT(v_exception1,-20666);
     	PRAGMA EXCEPTION_INIT(v_exception2,-30666);
	BEGIN
		RAISE v_exception1;
	EXCEPTION
		WHEN v_exception1 then
			BEGIN
				errcode3 := SQLCODE;
				errmsg3 := substr(SQLERRM, 1, 255);
				RAISE v_exception2;						
			EXCEPTION
				WHEN v_exception2 then
					errcode4 := SQLCODE;
					errmsg4 := substr(SQLERRM, 1, 255);
			END;			
			errcode2 := SQLCODE;	
			errmsg2 := substr(SQLERRM, 1, 255);
	END;
	errcode1 := SQLCODE;
	errmsg1 := substr(SQLERRM, 1, 255);
	
	DBMS_OUTPUT.PUT_LINE('errcode1 = ' || errcode1 || ' ' || 'errmsg1 = ' || errmsg1);
	DBMS_OUTPUT.PUT_LINE('errcode2 = ' || errcode2 || ' ' || 'errmsg2 = ' || errmsg2);
	DBMS_OUTPUT.PUT_LINE('errcode3 = ' || errcode3 || ' ' || 'errmsg3 = ' || errmsg3);
	DBMS_OUTPUT.PUT_LINE('errcode4 = ' || errcode4 || ' ' || 'errmsg4 = ' || errmsg4);
END;
/

errcode1 = 0 errmsg1 = ORA-0000
errcode2 = -20666 errmsg2 = ORA-20666:
errcode3 = -20666 errmsg3 = ORA-20666:
errcode4 = -30666 errmsg4 = ORA-30666:
DO

总结

异常块内获取的sqlcode和sqlerrm的值为抛出异常对应的错误码和错误信息,非异常块内sqlcode是0,sqlerrm是ORA-0000

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值