ORA-01008 バインドされていない変数があります
Laravelを使っていて遭遇したこの
ORA-01008 バインドされていない変数があります。
検索しても簡単に探せなかったのでメモをしておきます。
今回はLaravelでクエリを生成する際に発生したエラーでした。
まず、ログなり確認して生成されたSQLをSQLクライアントに貼り付けて実際に動作するか確認してみます。
今回のは動かなかったので、バインドされている変数を見てみると、値が想定と違う場所に来ていました。
場所を見るとサブクエリを使っている部分で、Laravelでサブクエリを使う際にbindingの追加をしていないことが原因のようでした。
ただ単純にmergeBinding($subquery)をしただけでは、?に埋まるバインド変数がおかしな順序になってしまいました。
順序にも気をつける必要があります。
というより今回はQueryBuilder(hogetable::select(~~~)を使っておらず、ファサード(DB::table(〜〜))を使ってjoinしていたので、
addBinding($subquery->getBindings(), 'join')
をサブクエリをjoinした後に書きました。
その後、$mainqueryのquery内のbindingsをみると追加されていました。
joinを使ったなら、addBindingのtypeは指定しないとうまくバインドできないようでした。
以上、備忘録でした。
Share this post
Twitter
Google+
Facebook
Email