0

次のようなクエリがあります。

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」を削除すると、問題が解決するようです。これが、スニペットや他の人のコードをコピーして、それがうまくいくと思い込んではいけない理由です。

4

0 に答える 0