我见过许多 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 循环是必要的?
我见过许多 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 循环是必要的?
只是一个疯狂的猜测:使用这样的循环可能会以某种方式简化使用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。但 0 否则,因为我们在递增之前中断i
。
在某种程度上,有一个常见的习惯用法是使用无限 for 循环和WHENEVER DO BREAK
语句来获取结果:
EXEC SQL WHENEVER NOT FOUND DO break;
for (;;)
{
EXEC SQL FETCH...
}
EXEC SQL CLOSE my_cursor;
使用这种循环的常见场景之一是当数组中的数据可用时,该数组将在程序的其他地方使用,但在某些部分,您只需要处理该数组的第一条记录。
此循环有助于挑选出此类数组的第一条记录。
但是,当您需要挑选出数组的第一条记录时,请确保在获取游标中使用“order by”,以便您可以控制第一条记录并相应地对其执行所需的操作。