让我发疯的信息是ORA-01008 - Not all variables bound
。
有没有办法知道我拼错了 42 个可能的变量名中的哪一个而不盯着显示器直到我的眼睛弹出?
更新:我ADO.NET
用来访问数据库。正如@Justin Cave 所建议的那样,它可能确实在Oracle 异常中丢失了一些信息。但我很肯定即使在 SQL Plus 中也不会出现参数名称。
通常,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。
我不知道有什么方法可以让 Oracle 使错误更具体。也许将来的某个版本会改进此错误消息。
但是,您可以尝试其他事情,而不仅仅是盯着它看。例如,一次将 SQL 语句中的每个变量转换为文字,直到错误消失。如果可能,请生成变量名称列表,而不是手动键入它们。