在Oracle

时间:2016-09-29 13:13:06

标签: oracle oracle11g

如何定义日期变量并从oracle中的表中分配该变量?

我在下面试过

DEFINE EXTRACTION_DATE = SELECT DATA_EXTRACTION_DATE FROM tbl1

SELECT PA.PERSON_ID,A.PERIOD_END_DATE,PA.OPT_OUT_OF_PLAN_DATE,A.TERMINATION_DATE,
        CASE WHEN A.PERIOD_END_DATE <= ADD_MONTHS(TRUNC(&EXTRACTION_DATE), -3) THEN 'Y'  ELSE 'N' END 
    FROM 
    tbl2

它抛出了无效的语句错误。

它与另一个不重复。因为我需要从表中获取变量而不是静态变量。

3 个答案:

答案 0 :(得分:0)

尝试类似: -

declare

var1 <dtatatype same as your table column>;
var2 <dtatatype same as your table column>;    
var3 <dtatatype same as your table column>;  
var4 <dtatatype same as your table column>;    
var5 <dtatatype same as your table column>;

var_dt date;

begin


SELECT EXTRACTION_DATE 
into var_dt
FROM tbl1;


SELECT PA.PERSON_ID,
       A.PERIOD_END_DATE,
       PA.OPT_OUT_OF_PLAN_DATE,
       A.TERMINATION_DATE,
       CASE WHEN A.PERIOD_END_DATE <= ADD_MONTHS(var_dt), -3) 
        THEN 'Y'  
       ELSE 'N' END
     into
       var1,
       var2,
       .
       .
       var5
    FROM     tbl2;

end;

答案 1 :(得分:0)

据我所知,我并不完全明白你要做什么 您可以通过以下方式设置变量

1 - )如果你写了一个程序,

declare
EXTRACTION_DATE date;

begin
  SELECT DATA_EXTRACTION_DATE into EXTRACTION_DATE FROM tbl1;
end;

2 - )如果你的数据引用了一个表,你可以用户光标

declare
cursor crs is SELECT * into EXTRACTION_DATE FROM tbl1;

then use crs in for loop

3 - )您可以在第二个查询中编写上层查询。

SELECT PA.PERSON_ID,A.PERIOD_END_DATE,PA.OPT_OUT_OF_PLAN_DATE,A.TERMINATION_DATE,
        CASE WHEN A.PERIOD_END_DATE <= ADD_MONTHS(TRUNC(SELECT DATA_EXTRACTION_DATE FROM tbl1), -3) THEN 'Y'  ELSE 'N' END 
    FROM 
    tbl2

答案 2 :(得分:0)

我将假设这是某种脚本所必需的。如果是这样,您可以使用{* 1}}命令及其在SQL * Plus中的COLUMN参数执行此操作:

new_value

我强烈建议您阅读所有this article,特别是this section

ETA:请记住,如果使用此方法,DATE将作为字符串输出,因此您必须确保在select语句中进行适当的转换,例如:

SQL> column my_val new_value my_val_subst_param
SQL> define my_val_subst_param
Symbol my_val_subst_param is UNDEFINED

SQL> select 'hello!' my_val from dual;
MY_VAL
------
hello!

SQL> select '&my_val_subst_param' some_val from dual;
'HELLO!'
--------
hello!