如何使Oracle错误消息更详细?

时间:2009-01-23 16:24:33

标签: oracle ado.net messages

让我发疯的消息是ORA-01008 - Not all variables bound

有没有办法知道我拼错了42个可能的变量名中的哪一个而没有盯着显示器直到我的眼睛弹出来?

更新:我使用ADO.NET访问数据库。正如@Justin Cave建议的那样,它可能会丢失Oracle异常中的一些信息。但我很肯定即使在SQL Plus中也不会出现参数名称。

2 个答案:

答案 0 :(得分:1)

我不知道有什么办法让Oracle更具体地说明错误。也许某些未来版本会改进此错误消息。

但是,不仅仅是盯着它,你还可以尝试其他的东西。例如,将SQL语句中的每个变量一次转换为文字变量,直到错误消失为止。如果可能,生成变量名列表,而不是手动输入。

答案 1 :(得分:1)

一般情况下,Oracle提供任何错误的行号和列号,但这取决于您使用的特定API(除非您碰巧正在编写OCI应用程序,这可能不太可能),无论是否以及如何API被调用。由于答案可能最终是特定于API的,您使用的API是什么,以及在发生错误时您的代码是什么样的(即JDBC,ODBC,OLE DB等)?

例如,如果我编写带有拼写错误的变量名的PL / SQL块,除了错误消息之外,SQL * Plus还将报告错误的行号和列号。另一方面,许多API只会默认报告PLS-00201错误。

SQL> declare
  2    i integer;
  3  begin
  4    j := 1;
  5  end;
  6  /
  j := 1;
  *
ERROR at line 4:
ORA-06550: line 4, column 3:
PLS-00201: identifier 'J' must be declared
ORA-06550: line 4, column 3:
PL/SQL: Statement ignored

同样,如果执行带有无效变量名的SQL语句,SQL * Plus将获得列和行位置,并在违规字符下放置*,即

SQL> create table a( col1 number );

Table created.

SQL> insert into a( colN ) values ( 1 );
insert into a( colN ) values ( 1 )
               *
ERROR at line 1:
ORA-00904: "COLN": invalid identifier

大多数PL / SQL IDE(TOAD,SQL Developer等)都会通过查询相应的OCI API来做类似的事情。但是,确切地说,这将取决于API。