如何在 pro *c/c++ 中 sqlerror 中断时限制 EXEC SQL 的范围



In oracle pro *c/c++

EXEC SQL WHENEVER SQLERROR DO break;

这句话到底是做什么的?这会在以下所有 exec sql 语句中插入中断语句?

如何限制休息的范围?

从文档中:

做休息

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

因此,每当遇到错误时,都会发出break,这在循环之外没有太大意义。如果要在特定语句之后重置行为,请发出EXEC SQL WHENEVER SQLERROR CONTINUE;以重置为默认错误处理行为:

继续

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

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

该语句的工作方式类似于 C/C++ 宏:它从声明点一直应用到文件末尾或直到重新声明,因此您必须重新声明它

此语句的作用类似于 C 预处理器宏,因此它从语句插入代码的位置开始,直到源文件的末尾或使用不同的命令重新声明同一语句时。如果你在函数、for、while 或任何其他代码块中声明它并不重要:该语句从他的声明一直应用到文件末尾或下一个声明

我经常使用此指令来处理 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;
        }

相关内容

  • 没有找到相关文章

最新更新