1

我得到了一个带有绑定变量的查询,其中同一个绑定变量多次出现,例如:

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

当我在 sqlplus 中运行此查询时,Oracle 似乎是按名称绑定的。ie 认识到 parm1 的第一次和第二次出现是同一个参数,并且只提示我一次 parm1 的值。但是,当我在我的 C++ 程序中将绑定变量描述到绑定描述符中时,它总是按位置绑定。

EXEC SQL DESCRIBE BIND VARIABLES FOR my_stmt INTO myBindDesc

myBindDesc->F 的值是 2 而不是 1,在我填充它们之前,查询不会正确执行,即使它是相同的值。我的问题是:有没有办法在 PRO*C 中按名称绑定?

4

1 回答 1

0

我无法确定导致此问题的原因,但您可以通过多种方式重写查询以仅使用 :VAR 一次。我希望这可以帮助你 - 如果不明白,至少解决你的问题:

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 回答