Oracle 在变量中捕获日期的适当方法?
Oracle SQL*Plus(以及SQL Developer)不支持将变量声明为日期() 所以我可以选择一个varchar,但它需要我转换成一个字符串。那就不再是真正的约会了,我也不能在上面做日期算术了 使用日期变量的适当方法是什么?我在开始/结束时使用变量而不是声明,因为我需要它们在块外可用,以便于显示选择Oracle 在变量中捕获日期的适当方法?,oracle,oracle-sqldeveloper,sqlplus,oracle12c,Oracle,Oracle Sqldeveloper,Sqlplus,Oracle12c,Oracle SQL*Plus(以及SQL Developer)不支持将变量声明为日期() 所以我可以选择一个varchar,但它需要我转换成一个字符串。那就不再是真正的约会了,我也不能在上面做日期算术了 使用日期变量的适当方法是什么?我在开始/结束时使用变量而不是声明,因为我需要它们在块外可用,以便于显示选择 clear screen; variable someid number; variable somedate varchar; exec :someid := 1234; Beg
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;
如果你想做算术运算,你需要使用
到日期
或到时间戳
显然这是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');
看看这里如果你想做算术,你需要使用
到日期
或到时间戳
显然这是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');
看看这里这或多或少做了相同的事情:
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,所以您可能也在使用SQL Developer。这或多或少是一回事:
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,所以您可能也在使用SQL Developer。“SqlPlus限制”,所以我没有使用SQL*Plus客户端(很抱歉没有提及),我使用的是SQL Developer。也许在开始/结束块之外的所有内容都被认为是“SqlPlus”,即使您没有使用特定的客户机?你能澄清一下吗。当我回到PC时,我会尝试你的解决方案。@AaronLS-大多数适用于SQL*Plus的东西也适用于SQL开发者。这当然是“SqlPlus限制”,所以我没有使用SQL*Plus客户机(很抱歉没有提及),我使用的是SQL Developer。也许在开始/结束块之外的所有内容都被认为是“SqlPlus”,即使您没有使用特定的客户机?你能澄清一下吗。当我回到PC时,我会尝试你的解决方案。@AaronLS-大多数适用于SQL*Plus的东西也适用于SQL开发者。当然可以。谢谢。我要做的一个重要方面是“我在开始/结束时使用变量而不是声明,因为我需要它们在块外可用,以便于显示选择。”使用dbms_输出或游标很快就会变得单调乏味。谢谢。我尝试做的一个重要点是“我在开始/结束时使用变量而不是声明,因为我需要它们在块外可用,以使选择易于显示。”使用dbms_输出或游标很快就会变得单调乏味。