【问题标题】:Assigning values to a variable in oracleoracle中给变量赋值
【发布时间】:2014-05-14 12:55:12
【问题描述】:
 currDate VARCHAR2(4000);
SELECT to_date(SYSDATE, 'DD/MM/YYYY')  into currDate
FROM DUAL;

在 oracle 中执行上述语句时出现以下错误

ORA-00905:缺少关键字 00905. 00000 - “缺少关键字”

请帮助我解决它。 谢谢

【问题讨论】:

  • 设置currDate 后,您将如何处理它,来自哪个客户端?这将决定您是否可以使用替换变量、绑定变量,或者它是否应该只在 PL/SQL 块中。无论如何,将日期转换为除显示之外的任何内容的字符串通常都不是一个好主意。

标签: oracle


【解决方案1】:

如果您想将值存储在变量中,请使用以下内容

variable currDate varchar2(100);

exec :currDate:=to_char(SYSDATE, 'DD/MM/YYYY');
select :currDate from dual;

:CURRDATE
---------- 
13/05/2014

或者您可以使用匿名 pl/sql 块来执行此操作

set serveroutput on

declare
 currDate varchar2(100);
begin
 SELECT to_char(SYSDATE, 'DD/MM/YYYY') into currDate FROM DUAL;
 dbms_output.put_line(currDate);
end;

/

【讨论】:

  • 你的第一个例子不起作用; :currDate 之后仍然为空。在这两个示例中,您还应该使用 to_char 而不是 to_date
  • 用你的第一个例子,做print currDateselect :currDate from dual;它是空的。您从查询中得到显示的日期,至少在 SQL*Plus 中,但是into 子句没有做任何事情。 (以及 SQL Developer 4 中的选择错误,由于某种原因,使用 ORA-01006)。
  • @AlexPoole 感谢您的解释。我已经更正了答案。
  • 感谢您的回答。它现在正在工作。但我不知道为什么我的代码不起作用,因为我写的是通过 select 语句为变量赋值的一般语法。
【解决方案2】:

这就是 SQL 和 PL/SQL(SQL 的过程扩展)的区别。 你写的是 pl/sql 块的语法。 PL/SQL 块的一般形式是

declare
...
begin
/* your code */
exception
....
end;
/

如果需要给变量赋值,SQL中的一般语法是

声明变量variable currDate varchar2(100);

为变量exec :currDate:=to_char(SYSDATE, 'DD/MM/YYYY');赋值

此变量:currDate 是全局变量,可在整个会话期间使用。

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2021-12-31
    • 2020-07-31
    • 2014-04-30
    • 2017-08-04
    • 2011-12-23
    相关资源
    最近更新 更多