Oracle 执行语句后如何检索成功/失败消息?

Oracle 执行语句后如何检索成功/失败消息?,oracle,odp.net,Oracle,Odp.net,运行查询后,如何获取Oracle显示的消息?例如,如果我写 create table t; create table t(id int); 它将显示此消息 ORA-00906: missing left parenthesis 但是如果我写 create table t; create table t(id int); 它显示 table created. 我想像这样获取这些消息 ORA-00906: missing left parenthesis 或 问题陈述是: 我希望用户

运行查询后,如何获取Oracle显示的消息?例如,如果我写

create table t;
create table t(id int);
它将显示此消息

ORA-00906: missing left parenthesis
但是如果我写

create table t;
create table t(id int);
它显示

table created.
我想像这样获取这些消息

 ORA-00906: missing left parenthesis

问题陈述是: 我希望用户在web浏览器的文本区域中输入他的查询。我将获取该查询并将其传递给Oracle,并希望显示与他在SQL*Plus上而不是在浏览器中编写这些查询时相同的消息

简单地说,我想创建一个类似SQL*Plus的页面


我正在使用C#中的ASP.NET 4.5以及ODP.NET和Oracle 10g。从我的研究中,我不知何故了解到,在成功执行的情况下,Oracle会返回一些SQLCA代码,这些代码由SQL*Plus操作并显示为正确的消息。

如果您使用的是
SQL*Plus
,则可以将错误消息捕获到
sperrorlog
表中。这项新功能是在
11.1版
中引入的。您可以将以下类型的错误记录到此表中-

  • 错误
  • SP2错误
  • 偏最小二乘误差
我写了一篇关于它的小文章,你可以看一看,了解更多信息

您只需为会话设置errorlogging

这就是
sperrorlog
表在描述时的样子-

SQL> desc sperrorlog;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 USERNAME                                           VARCHAR2(256)
 TIMESTAMP                                          TIMESTAMP(6)
 SCRIPT                                             VARCHAR2(1024)
 IDENTIFIER                                         VARCHAR2(256)
 MESSAGE                                            CLOB
 STATEMENT                                          CLOB
让我们看一个例子-

SQL> set errorlogging on;
SQL> selct * from dual;
SP2-0734: unknown command beginning "selct * fr..." - rest of line ignored.
SQL> select timestamp, username, script, statement, message from sperrorlog;

TIMESTAMP
---------------------------------------------------------------------------
USERNAME
--------------------------------------------------------------------------------

SCRIPT
--------------------------------------------------------------------------------

STATEMENT
--------------------------------------------------------------------------------

MESSAGE
--------------------------------------------------------------------------------

11-SEP-13 01.27.29.000000 AM
SCOTT


TIMESTAMP
---------------------------------------------------------------------------
USERNAME
--------------------------------------------------------------------------------

SCRIPT
--------------------------------------------------------------------------------

STATEMENT
--------------------------------------------------------------------------------

MESSAGE
--------------------------------------------------------------------------------

selct * from dual;
SP2-0734: unknown command beginning "selct * fr..." - rest of line ignored.
回滚
与此功能一起使用时会出现问题。我有一篇关于解决方法的文章,请尝试“InfoMessage”事件:


在11.1及以上版本中,使用哪种编程语言?
SQL*加错误记录
现在很容易。请参阅我的答案。对于ORA xxxx邮件检索,您是在谈论来自某个用户的邮件吗?不过,基于缺少异常,您需要编写自己的“成功”消息。谢谢您的回复。但我还问您,如果没有错误,那么如何获得oracle返回的消息,例如成功创建表、更改表、创建过程、函数或插入、删除、更新。在所有这些情况下,如果成功,oracle将显示相应的消息。如何获取该消息。@Mohit-“Oracle”不会返回这些消息,客户端(例如SQLPlus)会根据没有错误和/或受影响的行数生成这些消息。具体如何取决于客户;我相信SQLPlus使用OCI方法。如果需要使用相同的逻辑,您可以生成自己的版本。@AlexPoole-谢谢您的指导。如果需要,您能告诉我如何复制OCI方法逻辑,因为我希望它们是Sql Plus消息的副本。@AlexPoole-我正在使用ASP.NET和C#中的ODP.NET。我正在使用一种连接的方法。我只是想知道是否有任何方法可以通过编程方式在SQL Plus结果窗格中显示消息。你可以看到。在那里输入错误的查询时,它们返回的消息与sql plus返回的消息完全相同。@Mohit,当我回答您的问题时,我只考虑了错误消息,因为我忽略了您的另一点。无论如何,正如亚历克斯提到的,你能核对一下你所有的品脱并相应地修改你的问题吗。