将数值变量传递给简单的oracle查询

时间:2015-12-31 01:39:45

标签: oracle oracle10g

我有桌子

表A

ID    PRICE    DATE
123   200      01-SEP-2015
456   500      01-AUG-2015

在我的查询中,我想显示日期(日期+ X个月)< sysdate else显示null。 我在该查询中使用变量时遇到问题。

记录1中的例子

(01-SEP-2015 + 3个月)= 01-DEC-2015不低于sysdate所以,我不想显示该日期。

但另一方面是第二次记录 (01-AUG-2015 + 3个月)= 01-NOV-2015小于sysdate所以,我想显示该日期。

declare
x number(5);
set x:=3;

select 
a.ID,
a.PRICE,
case when( ADD_MONTHS(a.DATE, x) < sysdate() )
   then a.DATE
else
    NULL
end as NEW_DATE
from TableA a;

1 个答案:

答案 0 :(得分:3)

您需要在变量名前加上&符号(&),以告诉SQL * Plus替换变量的值:

declare
x number(5);
set x:=3;

select a.ID,
       a.PRICE,
       case
         when ADD_MONTHS(a.DATE, &x) < sysdate then a.DATE
         else NULL
      end as NEW_DATE
  from TableA a;

此外,DATE是Oracle中的数据类型 - 不要将其用作列名。你可以这样做,但它会在某处导致问题。

祝你好运。