2020-09-07 03:58发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨朋友,
我想知道在遇到任何异常时是否有任何方法可以继续执行存储过程。 基本上,我们使用出口处理程序捕获异常,并在捕获任何异常时编写适当的操作。 但是,它进入退出处理程序主体后不会返回到下一条语句。
我们在HANA SQL中是否有这样的规定可以返回到实际代码并继续保留到原来的位置?
谢谢
Gaurav
HANA 2.0 SP3
您可以将特定的编码(可能产生错误+退出处理程序的编码)封装在嵌套块中。 处理异常后,将执行嵌套块之后的逻辑。 例如
do 开始 开始-开始嵌套块 声明sqlexception的退出处理程序 从哑元中选择"处理异常"; 插入" dummy_table"值(1," xxx"); 插入" dummy_table"值(1," xxx"); -违反唯一约束 从哑元中选择"异常后直接"; - 还没到 !!! 结束; -末端嵌套块 从哑元中选择"异常后"; -选择完成; 同样在嵌套块中的异常处理程序被调用的情况下 结束;
嗨弗洛里安,
感谢您的回答。 我试图通过扩展代码来理解这种逻辑。 但是,除了您提出的建议之外,我还有两个问题。
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语句位置是否存在块?
最多设置5个标签!
您可以将特定的编码(可能产生错误+退出处理程序的编码)封装在嵌套块中。 处理异常后,将执行嵌套块之后的逻辑。 例如
嗨弗洛里安,
感谢您的回答。 我试图通过扩展代码来理解这种逻辑。 但是,除了您提出的建议之外,我还有两个问题。
以下是执行顺序(上面提到了行号):
第11行
第12行
第19行
第20行
第21行
第16行
第17行
第24行
第26行
第9行
问题1->当我转到第26行以捕获主块中发生的异常时,它没有转到嵌套块的异常处理程序。 这种行为对吗? 因此,我不得不从第7行到第10行为Main块引入另一个异常处理程序。
问题2->我们是否需要为所有异常处理SQL语句引入类似的嵌套块,因为我可以在第50行有一条易于发生异常的语句,而在第450行有一条易于发生异常的语句。我是否需要引入类似的嵌套块 各个SQL语句位置是否存在块?
谢谢
Gaurav
一周热门 更多>