何度だって引っかかるORACLEのエラー・・・。ORA-01008:バインドされていない変数があります。

投稿日:2017-05-31

今日も今日とて、ORA-01008のエラーに悩まされる。
無慈悲に「バインドされていない変数があります。」ってメッセージは出してくれるんだけど、ビンゴの位置は教えてくれないわけで・・・

何度目だろう・・・?と思いつつも、解決しない限りは納期が迫ってくるだけなので、ネットでエラー内容を検索。
バインドだから、変数を外部でバインドしてるとこだよな・・・とソースをさかのぼって確認する。
一見、おかしいところは無い。

この一見ってのが曲者で、地味に気づきにくいんだよねぇw

デバッグしつつ、発行されるSQLを見ても、特におかしいところはないし、そのSQL自体は実行できるし。
バインド変数自体が正しく入ってないんだろうな・・・と。

command.Parameters.Add(":param1", (string)whereTable["param1"]);

こんな感じで、パラメータをセットしてるけど、変数名が違ってたって落ちだった。
けど、そもそもSQLのほうは、

SELECT
A.param AS param
:
:
FROM
table1 A

こんな感じで、名前が違ったんだよね。
バインドさせたい変数自体は正しく入ってるし、SQL単体では実行できるしで、原因までたどり着くのに時間がかかった。

ただ、何回もこのエラーでどハマリしてるので、多少は感覚が掴めてきたかもしれない。
1.SQL単体で正しく実行できるか?
2.SQLに対して設定するパラメータは登録する変数に対して過不足じゃないか?
3.そもそもSQL内でのAS区やパラメータの名称が、外部定義時に正しく使用されているか?

この順番で見れば、とりあえず良さげな感じかな。
そりゃぁ、まだ経験してないエラーとか数え切れないけど、まずは目の前のエラーを解決しないと。







-ORACLE
-


  1. […]  日本の中心付近で仕様変更と闘うSE日記 何度だって引っかかるORACL… […]

comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

ORACLEでSPOOL処理の高速化を試す

ORACLEでSPOOL処理の高速化を考えてみた 事の発端は、お客様のお怒りでした・・・ なんで、お客さんに最新版のリリース時には、必ずスキーマ間の比較をすることを徹底しろと言われてしまったと。 まぁ …

OracleでLISTAGG関数を使ったけど、世界を変えられなかった話・・・

OracleでLISTAGG関数を使ったら、世界が変わった話。 はい、休日出勤でした。 そして、休日出勤の結果、以下のことが分かりました(泣 日本の中心付近で仕様変更と闘うSE日記OracleでLIS …

ORACLEでTO_CHARを使用し、カンマ区切りデータを出力する

帳票出力を行うPGで困った。 数値形式のデータのため、カンマ区切りで表示したいんだけど、テンプレートの制約のせいで上手く行かなくて時の解決方法。 帳票のテンプレートとなるファイルのセルは文字列形式。 …

Oracleで複数レコードを更新する方法

UPDATE文で、複数のレコードを一回のトランザクション内で更新する必要に迫られました。 基本的に、今まで使ってきたUPDATE文では、 UPDATE tableA set COL1 = 1 ,COL …

SQL文中で全角文字を使うなと言われたので、ORACLEでJOIN句の条件式をCASE文で分岐させる

JOINの条件式にCase文を入れる http://blog.goo.ne.jp/ilikehobby/e/80b471f96f6d693b6c5df75f18591c0e SQL文中で全角文字を使う …


カテゴリー