HANA SQL:处理异常后,继续执行存储过程

2020-09-07 03:58发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨朋友,

我想知道在遇到任何异常时是否有任何方法可以继续执行存储过程。 基本上,我们使用出口处理程序捕获异常,并在捕获任何异常时编写适当的操作。 但是,它进入退出处理程序主体后不会返回到下一条语句。

我们在HANA SQL中是否有这样的规定可以返回到实际代码并继续保留到原来的位置?

谢谢

Gaurav

HANA 2.0 SP3

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨朋友,

我想知道在遇到任何异常时是否有任何方法可以继续执行存储过程。 基本上,我们使用出口处理程序捕获异常,并在捕获任何异常时编写适当的操作。 但是,它进入退出处理程序主体后不会返回到下一条语句。

我们在HANA SQL中是否有这样的规定可以返回到实际代码并继续保留到原来的位置?

谢谢

Gaurav

HANA 2.0 SP3

付费偷看设置
发送
2条回答
SAP砖家
1楼-- · 2020-09-07 05:05

您可以将特定的编码(可能产生错误+退出处理程序的编码)封装在嵌套块中。 处理异常后,将执行嵌套块之后的逻辑。 例如

 do
 开始
   开始-开始嵌套块
     声明sqlexception的退出处理程序
       从哑元中选择"处理异常";

     插入" dummy_table"值(1," xxx");
     插入" dummy_table"值(1," xxx");  -违反唯一约束

     从哑元中选择"异常后直接";  - 还没到 !!!
   结束;  -末端嵌套块

   从哑元中选择"异常后";  -选择完成; 同样在嵌套块中的异常处理程序被调用的情况下
 结束;
 
clever101
2楼-- · 2020-09-07 04:50

嗨弗洛里安,

感谢您的回答。 我试图通过扩展代码来理解这种逻辑。 但是,除了您提出的建议之外,我还有两个问题。

 1个过程" TEST_EXCEPTION"()
 2语言SQLSCRIPT
 3 SQL安全定义器
 4 AS
 5开始
 6 DECLARE VAR11 VARCHAR(500);  -保留此变量仅用于测试,不使用
 7为sqlexception声明退出处理程序-处理主块中的异常
 8开始
 9从哑元中选择"已处理主体异常";
 10结束;
 11从DUMMY中选择"主要块的第一声明";
 12从DUMMY中选择"主要块的第二个陈述";
 13开始-开始嵌套块
 14为sqlexception声明退出处理程序
 15开始
 16从哑元中选择" exception handle1";
 17从哑元中选择" excepted handler2";
 18岁;
 19从哑元中选择"从Proc执行错误行";
 20在" DUMMY_TABLE"中插入值('10001','C001');
 21在" DUMMY_TABLE"中插入值('10001','C001');
 22从哑元中选择"异常后直接";  - 还没到 !!!
 23日结束;  -末端嵌套块
 24从哑元中选择"异常后";  -选择完成; 同样在嵌套块中的异常处理程序为25的情况下
 26在" DUMMY_TABLE"中插入值('10001','C001');  -再次引入例外
 27 END; 

以下是执行顺序(上面提到了行号):

第11行

第12行

第19行

第20行

第21行

第16行

第17行

第24行

第26行

第9行

问题1->当我转到第26行以捕获主块中发生的异常时,它没有转到嵌套块的异常处理程序。 这种行为对吗? 因此,我不得不从第7行到第10行为Main块引入另一个异常处理程序。

问题2->我们是否需要为所有异常处理SQL语句引入类似的嵌套块,因为我可以在第50行有一条易于发生异常的语句,而在第450行有一条易于发生异常的语句。我是否需要引入类似的嵌套块 各个SQL语句位置是否存在块?

谢谢

Gaurav

一周热门 更多>