私を夢中にさせるメッセージはORA-01008 - Not all variables bound
.
目が飛び出すまでモニターを見つめずに、42 個の可能な変数名のどれをスペルミスしたかを知る方法はありますか?
更新:ADO.NET
データベースへのアクセスに使用します。@Justin Caveが示唆しているように、おそらくOracleの例外でいくつかの情報が失われます。しかし、SQL Plus でもパラメーター名が表示されないことは確かです。
一般に、Oracle はエラーの行番号と列番号を提供しますが、それらの API が呼び出されるかどうか、およびどのように呼び出されるかについては、使用している特定の API によって異なります (OCI アプリケーションを作成している場合を除きます。これはおそらくありそうもないことです)。 . 答えは 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 ステートメントの各変数を一度に 1 つずつリテラルに変換します。可能であれば、変数名を手動で入力する代わりに、変数名のリストを生成してください。