Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 在变量中捕获日期的适当方法?_Oracle_Oracle Sqldeveloper_Sqlplus_Oracle12c - Fatal编程技术网

Oracle 在变量中捕获日期的适当方法?

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

Oracle SQL*Plus(以及SQL Developer)不支持将变量声明为日期()

所以我可以选择一个varchar,但它需要我转换成一个字符串。那就不再是真正的约会了,我也不能在上面做日期算术了

使用日期变量的适当方法是什么?我在开始/结束时使用变量而不是声明,因为我需要它们在块外可用,以便于显示选择

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_输出或游标很快就会变得单调乏味。