Oracle 如何在pro*c/c++;

Oracle 如何在pro*c/c++;,oracle,oracle-pro-c,Oracle,Oracle Pro C,在oracle pro*c/c中++ EXEC SQL WHENEVER SQLERROR DO break; 这句话到底是怎么说的?这将在以下所有exec sql语句中插入break语句 如何限制do break的范围?: 一定要休息 一个实际的“break”语句放在程序中。在循环中使用此操作。当满足条件时,程序将退出它所在的循环 因此,每当遇到错误时,都会发出一个中断,这在循环之外并不意味着什么。如果要在特定语句之后重置行为,请在SQLERROR继续时发出EXEC SQL重置为默认错误处理

在oracle pro*c/c中++

EXEC SQL WHENEVER SQLERROR DO break;
这句话到底是怎么说的?这将在以下所有exec sql语句中插入break语句

如何限制do break的范围?

一定要休息

一个实际的“break”语句放在程序中。在循环中使用此操作。当满足条件时,程序将退出它所在的循环

因此,每当遇到错误时,都会发出一个
中断
,这在循环之外并不意味着什么。如果要在特定语句之后重置行为,请在SQLERROR继续时发出
EXEC SQL重置为默认错误处理行为:

继续

如果可能,您的程序将继续运行下一条语句。这是默认操作,相当于不使用where指令。您可以使用它来关闭条件检查


实际上,您可以在两个
指令之间夹住一条语句,使其仅适用于该语句。

此语句的作用类似于C预处理器宏,因此,它从代码中插入station的位置开始,一直到源文件的末尾,或者使用不同的命令重新声明相同的station。无论您是在函数中声明它,还是在for、while或任何其他代码块中声明它,都无关紧要:statment从其声明一直应用到文件结尾或下一个声明

我经常使用此指令在Pro*C++源代码中处理游标:

EXEC SQL WHENEVER NOT FOUND DO THROW_SQLERROR("free text"); // If no data found execute THROW_SQLERROR macro.

        try
        {
            EXEC SQL DECLARE c CURSOR FOR
                SELECT field
                FROM table;

            EXEC SQL OPEN c;

            while(1)
            {
EXEC SQL WHENEVER NOT FOUND DO break; // if no data found execute C break
                EXEC SQL FETCH c INTO :iField;
EXEC SQL WHENEVER NOT FOUND DO THROW_SQLERROR("free text"); // If no data found execute C THROW_SQLERROR macro.

                ...
            }

            EXEC SQL CLOSE c;
        }
        catch(...) 
        { 
            try { EXEC SQL CLOSE c; } catch(...) { }
            throw;
        }

该语句的工作方式类似于C/C++宏:它从声明点一直应用到文件结尾或重新声明,因此您必须重新声明它。它不会随机插入。限制范围是什么意思?如果您希望在代码的不同部分执行不同的操作,您是否会在任何时候发出多个
指令?@AlexPoole感谢您提供的链接。。。。对不起,这不是随机的。。。它为程序中的所有exec sql语句插入。。。我想把它限制在第一个exec sql语句中。您的意思是,只要SQLERROR继续,您就需要添加
exec sql在不需要中断处理的语句之后?当然,您可以自己检查sqlca代码,模仿预处理代码中的内容。每当SQLERROR CONTINUE被插入到每个EXEC SQL语句中时,EXEC SQL将不再工作。因此,每当我在循环外使用exec sql时,它都会显示错误,在没有循环或开关的情况下继续。您是说“继续”还是仅仅“继续”?他们的意思不同;重置行为时,您不希望执行
do