Как сделать сообщения об ошибках Oracle более подробными? - PullRequest
8 голосов
/ 23 января 2009

Сообщение, которое сводит меня с ума - ORA-01008 - Not all variables bound.

Есть ли способ узнать, какое из 42 возможных имен переменных я написал с ошибкой, не глядя на монитор, пока мои глаза не выскочат?

Обновление: Я использую ADO.NET для доступа к базе данных. Возможно, он теряет некоторую информацию в исключениях Oracle, как предположил @Justin Cave. Но я уверен, что имя параметра никогда не появляется даже в SQL Plus.

Ответы [ 2 ]

1 голос
/ 23 января 2009

Как правило, 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 и т. Д.) Будут делать нечто подобное, опрашивая соответствующие API OCI под прикрытием. Однако, как именно это будет сделано, будет зависеть от API.

1 голос
/ 23 января 2009

Я не знаю, как заставить Oracle сделать ошибку более конкретной. Возможно, какая-то будущая версия улучшит это сообщение об ошибке.

Вместо того, чтобы просто смотреть на это, есть и другие вещи, которые вы можете попробовать. Например, конвертируйте каждую переменную в операторе SQL по буквам по одной, пока ошибка не исчезнет. Если возможно, генерируйте список имен переменных, а не вводите их вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...