次のようなクエリがあります。
SELECT A.A, A.B, B.A, B.C, B.D
FROM tableone A, tabletwo B
WHERE A.A = B.A
AND B.C = :p_name
param :p_name がFOOに設定されている場合、次のようなエラーが発生します。
[42703] エラー: 列 "FOO" が存在しません
一重引用符「FOO」を含めるように手動で設定すると、機能します。
エスケープされた一重引用符をパディングしようとしました。quote_* 関数を試しました。「@」、「$」、「?」を使用して検索しました。パラメータの種類。これがどんどん出てきます。
編集
できる限り排除して、IntelliJのSQLコンソールから次のことを試しました
SELECT * from A where A.B = :p1
SELECT * from A where A.B = ?
SELECT * from A where A.B = @p1
そして、エディットボックスにパラメータ「Foo」を追加します。3 つのケースすべてで、同じ問題が発生します。編集ボックスに「Foo」を追加すると、期待どおりの結果が得られます。
私もプリペアードステートメントと ? を使用しました。:p1 を使用した callableStatement ではなく、同じ結果が得られました。
私は何を間違っていますか?
編集
JDBC URL から「stringtype=unspecified」を削除すると、問題が解決するようです。これが、スニペットや他の人のコードをコピーして、それがうまくいくと思い込んではいけない理由です。