是否有一个Oracle RAISE_APPLICATION_ERROR替代信息消息?



目前在我们的代码中有一个地方使用了RAISE_APPLICATION_ERROR:

IF v_cl_type_row.code = 'B_DOCUMENT' THEN
RAISE_APPLICATION_ERROR(-20000, '*A message for the user*');
END IF;

这里发生的不是错误,用户只是得到一个信息消息。由于当前这是作为错误引发的,因此它也被记录为错误,但实际上并不是。因此,我的任务是以某种方式将其作为信息消息返回,以避免不必要的日志记录。

但这是可能的,甚至与Oracle内置函数?我还没能找到做那样事情的方法。

我们正在使用Oracle 19c.

IF-THEN-ELSE表示PL/SQL。用该语言编写的代码在数据库中执行。PL/SQL不是"交互式的"。

如果你使用像SQL*Plus(命令行)或GUI(如SQL Developer, TOAD等)这样的工具,你可以使用DBMS_OUTPUT.PUT_LINE代替RAISE_APPLICATION_ERROR,因为-正如你已经注意到-RAISE停止执行;用户看到了消息,但是他们不能做任何事情来让这个过程继续它的工作。

在你的例子中,它应该是

IF v_cl_type_row.code = 'B_DOCUMENT' THEN
DBMS_OUTPUT.PUT_LINE('*A message for the user*');
END IF;

请注意,您必须等到过程完成才能一次查看所有消息;当代码达到这个点时,Oracle不会一个一个地显示它们。

然而,就可以用于调试目的而言,用户很可能不会使用我前面提到的任何工具。如果它是例如Oracle Forms应用程序或Apex应用程序,该代码将工作(即不会引发编译错误),但没有人会看到任何东西,因为这些前端无法显示这样的消息。

在窗体中,例如,你可以使用message内置(文本将显示在状态行,在屏幕的底部)或alert(所以你会看到一个弹出窗口,让你确认消息并继续,即代码将继续执行)。

因此,这取决于您实际使用哪个工具来开发该应用程序及其与最终用户交互的能力。

最新更新