Oracle SQL * Plus(以及SQL Developer)不支持将变量声明为日期(Citation)。
所以我可以选择varchar,但它需要我转换为字符串。然后它不再是一个真正的日期,我不能对它进行日期算术。
使用日期变量的合适方法是什么?我在BEGIN / END的开头使用变量而不是声明,因为我需要在块外部使用变量来使选择容易显示。
clear screen;
variable someid number;
variable somedate varchar;
exec :someid := 1234;
Begin
select c.some_timestamp into :somedate from someschema.sometable c
where c.someid = :someid ;
end;
/
select :somedate from dual;
答案 0 :(得分:2)
如果您想要算术,则需要使用to_date
或TO_TIMESTAMP
。
显然是SqlPlus
限制。以下是一个例子:
variable my_date varchar2(30)
exec :my_date := '12-04-2017';
select * from mytable where date_col = to_date(:my_date,'dd-mm-yyyy');
答案 1 :(得分:0)
这或多或少都是一样的:
declare
somedate date;
Begin
select c.some_timestamp into somedate
from someschema.sometable c
where c.someid = &someid ;
dbms_output.put_line(somedate);
end;
/
显然,您需要在运行脚本之前启用SERVEROUTPUT,但是您可以使用somedate
作为日期,而无需始终从字符串中强制转换它。
归根结底,它归结为你要做的事情的细节。我发现现在我越来越少地使用SQL * Plus脚本进行交互式工作:我使用IDE工作表来开发它们,然后一些shell程序自动执行它们。你说你正在使用SQL Developer,所以你可能正在进行同样的旅程。