如何定义日期变量并从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
它抛出了无效的语句错误。
它与另一个不重复。因为我需要从表中获取变量而不是静态变量。
答案 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!