次のようなOracleスクリプトがあります。
variable L_kSite number;
variable L_kPage number;
exec SomeStoredProcedureThatReturnsASite( :L_kSite );
exec SomeStoredProcedureThatAddsAPageToTheSite( :L_kSite, :L_kPage );
update SiteToPageLinkingTable
set HomePage = 1
where kSite = :L_kSite and kPage = :L_kPage;
おそらく最後のステートメントはバインド変数の有効な使用法ですが、スクリプトを実行しようとすると、最後の行に次のようになります。
SQL Error: Missing IN or OUT parameter at index:: 1
私はOracleに特に堪能ではないので、ここでどのように進めるかわかりません。
上記のコメントに基づいて、SQL Developerの代わりにsqlplusでこれを実行し、UPDATEステートメントは完全に実行されました。ORAエラー番号が返されなかったため、これはSQL Developerの問題であると私は思いました。私を正しい方向に導いてくれてありがとう。
JavaコードでJDBCを使用していたときに、同様のエラーが発生しました。
このWebサイト (2番目のオーナ)によると、パラメータが不足しているクエリを実行しようとしていることを示しています。
例えば :
exec SomeStoredProcedureThatReturnsASite( :L_kSite );
最後のパラメーターなしでクエリを実行しようとしています。
たぶんSQLPlus
では同じ要件がないので、そこで働いていたのは幸運だったかもしれません。
それはjdbcに関連していると思います。
次のようなwhere条件があると、同様の問題が発生します(paramがありません)。
a = :namedparameter and b = :namedparameter
それは大丈夫です、私がこのようにしたとき:
a = :namedparameter and b = :namedparameter2 (the two param has the same value)
したがって、名前付きパラメーターの問題です。名前付きパラメーターの処理にバグがあると思います。最初のパラメーターのみが正しい値を取得し、2番目のパラメーターはドライバークラスによって設定されていないようです。多分それはバグではありません、私は何かを知らないだけですが、とにかくSQL開発者がjdbcドライバを使用しているので、SQL devとsqlplusが実行されている理由はそれが理由だと思います。
疑問符を含む列のエイリアスのタイプミス(たとえば、contract.reference as contract?ref)が原因でこのエラーが発生しました
同じエラーが発生し、原因が間違っているか欠落していることがわかりましたforeign key。 (JDBCの使用)