3

我见过许多 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;
}

为什么这个 for 循环是必要的?

4

2 回答 2

1

只是一个疯狂的猜测:使用这样的循环可能会以某种方式简化使用WHENEVER DO BREAKor时的错误处理WHENEVER DO GOTO

考虑以下代码片段:

for(i = 0; i < 1; i++)
{
    EXEC SQL WHENEVER SQLERROR DO BREAK; 
    EXEC SQL UPDATE emp SET sal = sal * 10; 
}
printf("%d",i);

如果我没有错(现在手头没有 pro*C),如果 SQL 查询已完成且没有错误,这将打印 1。但 0 否则,因为我们在递增之前中断i


在某种程度上,有一个常见的习惯用法是使用无限 for 循环和WHENEVER DO BREAK 语句来获取结果:

EXEC SQL WHENEVER NOT FOUND DO break;
for (;;)
{
    EXEC SQL FETCH...
}
EXEC SQL CLOSE my_cursor; 
于 2014-11-24T18:49:08.180 回答
0

使用这种循环的常见场景之一是当数组中的数据可用时,该数组将在程序的其他地方使用,但在某些部分,您只需要处理该数组的第一条记录。

此循环有助于挑选出此类数组的第一条记录。

但是,当您需要挑选出数组的第一条记录时,请确保在获取游标中使用“order by”,以便您可以控制第一条记录并相应地对其执行所需的操作。

于 2019-11-18T21:40:55.120 回答