用于在pro*C中封装PL/SQL块的循环
我见过很多pro*C程序,使用for循环“只执行一次”set a语句。 比如说,用于在pro*C中封装PL/SQL块的循环,c,for-loop,plsql,proc,oracle-pro-c,C,For Loop,Plsql,Proc,Oracle Pro C,我见过很多pro*C程序,使用for循环“只执行一次”set a语句。 比如说, for(i = 0; i < 1; i++) { EXEC SQL EXECUTE DECLARE /* some declarations here */ BEGIN /* some PL/SQL code here */ END-EXEC; } (i=0;i
for(i = 0; i < 1; i++)
{
EXEC SQL EXECUTE
DECLARE
/* some declarations here */
BEGIN
/* some PL/SQL code here */
END-EXEC;
}
(i=0;i<1;i++)的
{
EXEC SQL EXECUTE
声明
/*这里有一些声明*/
开始
/*这里有一些PL/SQL代码*/
末端执行器;
}
为什么有必要使用for循环?只是一个猜测:在使用或
时,使用这样的循环可能会以某种方式简化错误处理
考虑以下代码片段:
for(i = 0; i < 1; i++)
{
EXEC SQL WHENEVER SQLERROR DO BREAK;
EXEC SQL UPDATE emp SET sal = sal * 10;
}
printf("%d",i);
使用这种循环的常见场景之一是,当数据在一个数组中可用时,该数组将在程序的其他地方使用,但在某些部分中,您只需要处理该数组的第一条记录
这个循环有助于挑选出这类数组的第一条记录
但是,当您需要挑出数组的第一条记录时,请确保在抓取光标中使用“order by”,以便您可以控制第一条记录的内容并相应地对其执行所需的操作。可能是cargo cult编程。通常在使用(0)
时,do{/*something*/},主要是在宏中强制用户附加宏调用后的code>。@Coconop实际上不是强制添加代码>。这是为了确保从控件结构体内部使用多语句宏时,其行为符合预期。例如:if thisOrThat doSomething()代码>。如果soSomething
是一个多语句宏,要按预期的方式运行,必须将它包装在do{…}while(0)
块中。可能OP建议的代码片段也有类似的用途(额外的缺点是需要局部变量)。但若并没有上下文,就很难判断。@SylvainLeroux感谢您的澄清:)
EXEC SQL WHENEVER NOT FOUND DO break;
for (;;)
{
EXEC SQL FETCH...
}
EXEC SQL CLOSE my_cursor;