3

for ループを使用して set a ステートメントを「1 回だけ」実行する、多くの pro*C プログラムを見てきました。例えば、

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 を出力します。しかし、インクリメントする前に中断iするので、それ以外の場合は 0です。


WHENEVER DO BREAK それとは少し異なりますが、無限 for ループとステートメントを使用して結果をフェッチする一般的なイディオムがあります。

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