1

同じバインド変数が複数回表示されるバインド変数を含むクエリを取得しました。次に例を示します。

select *
  from some_table
  where param1 = :parm1 and
        applied_date = (select min(applied_date)
                          from some_table
                          where param1 = :parm1)

このクエリを sqlplus で実行すると、Oracle は名前でバインドされているように見えます。すなわち、parm1 の最初と 2 番目のオカレンスが同じパラメータであることを認識し、parm1 の値を求めるプロンプトを 1 回だけ表示します。しかし、C++ プログラムでバインド変数をバインド記述子に記述すると、常に位置によってバインドされます。

EXEC SQL DESCRIBE BIND VARIABLES FOR my_stmt INTO myBindDesc

myBindDesc->F の値は 1 ではなく 2 であり、同じ値であっても、両方に入力するまでクエリは正しく実行されません。私の質問は、PRO*C で名前でバインドする方法はありますか?

4

1 に答える 1

0

この問題の原因ははっきりとはわかりませんが、いくつかの方法で :VAR を 1 回だけ使用するようにクエリを書き直すことができます。これがあなたの助けになることを願っています-理解できない場合は、少なくとも問題を解決してください:

SELECT *
FROM some_table tout
JOIN (
    SELECT MIN(param1) AS "param1_min", MIN(applied_date) AS "applied_date_min"
    FROM some_table
    WHERE param1 = :parm1
) taux ON (1=1
AND tout.param1 = taux.param1_min
AND tout.applied_date = taux.applied_date_min
)
于 2012-04-26T17:21:08.700 に答える