when then sqlerrm raise_application_error predefinidas personalizadas others obtener linea excepciones error ejemplos oracle ado.net messages

then - ¿Cómo hacer que los mensajes de error de Oracle sean más detallados?



raise_application_error oracle (2)

En general, Oracle proporciona la línea y el número de columna de cualquier error, pero depende de la API particular que esté utilizando (a menos que esté escribiendo una aplicación OCI, que probablemente sea improbable) en cuanto a si se llaman esas API y cómo . Dado que es probable que la respuesta termine siendo específica de API, ¿qué API está utilizando y cómo se ve el código cuando ocurre el error (es decir, JDBC, ODBC, OLE DB, etc.)?

Como ejemplo, si escribo un bloque PL / SQL con un nombre de variable mal escrito, SQL * Plus informará el número de línea y columna del error además del mensaje de error. Muchas API, por otro lado, solo informarán el error PLS-00201 de forma predeterminada.

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

De manera similar, si ejecuta una instrucción SQL con un nombre de variable no válido, SQL * Plus obtendrá la posición de columna y línea y colocará un * debajo del carácter ofensivo, es decir,

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

La mayoría de los IDE de PL / SQL (TOAD, SQL Developer, etc.) harán algo similar al interrogar a las API de OCI apropiadas bajo las cubiertas. Sin embargo, exactamente cómo se hace esto dependerá de la API.

El mensaje que me vuelve loco es ORA-01008 - Not all variables bound .

¿Hay alguna manera de saber cuál de los 42 posibles nombres de variables he escrito mal sin mirar el monitor hasta que mis ojos se salgan?

Actualización: uso ADO.NET para acceder a la base de datos. Tal vez pierda algo de información en excepciones de Oracle, como @Justin Cave ha sugerido. Pero estoy seguro de que el nombre del parámetro nunca aparece incluso en SQL Plus.


No sé de ninguna manera para que Oracle haga el error más específico. Tal vez alguna versión futura mejorará este mensaje de error.

Sin embargo, en lugar de solo mirarlo, hay otras cosas que puedes intentar. Por ejemplo, convierta cada variable en la declaración SQL a una literal a la vez, hasta que el error desaparezca. Si es posible, genere la lista de nombres de variables en lugar de escribirlos manualmente.