大げさな推測: このようなループを使用すると、WHENEVER DO BREAK
orを使用するときのエラー処理が何らかの形で簡素化される可能性があり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;