首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle db -命名变量(sysdate)

Oracle db -命名变量(sysdate)
EN

Stack Overflow用户
提问于 2013-12-02 16:11:00
回答 1查看 360关注 0票数 1

在PL/SQL中。为什么可以将变量(sysdate)命名为保留字(Sysdate)?

例如,

代码语言:javascript
复制
set serveroutput on;    
declare sysdate integer := 23;
begin
dbms_output.put_line(sysdate);
end;

输出:23,而不是当前日期。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-02 16:30:49

仅仅因为sysdate是一个SQL保留字,而不是PL/SQL。SQL和PL/SQL有不同的保留词集。并非所有SQL保留字都是PL/SQL保留字,反之亦然。因此,尽管不建议使用某些SQL保留词作为PL/SQL中的标识符,但不以双引号括起来:

sysdate和(例如) add是SQL保留词,因此我们可以将它们作为PL/add中的变量使用,而不必将它们用双引号括起来:

代码语言:javascript
复制
SQL> set serveroutput on;
SQL> clear screen;
SQL> set feedback off;

SQL> declare
  2    sysdate varchar2(123);
  3    add     number;
  4  begin
  5    sysdate := 'aaaaa';
  6    add     := 123;
  7    dbms_output.put_line(sysdate || ' - ' ||to_char(add));
  8  end;
  9  /

结果:

代码语言:javascript
复制
aaaaa - 123  

但是我们不能创建一个列名为sysdateadd的表。

代码语言:javascript
复制
SQL> create table t1(
  2    sysdate varchar2(123)
  3  );
  sysdate varchar2(123)
  *
ERROR at line 2:
ORA-00904: : invalid identifier 

反之亦然。如果不用双引号括起来,我们就不能声明PL/SQL变量(例如) if,但是我们可以很容易地创建一个具有名为if的列的表,因为if是PL/SQL保留字,而不是SQL:

代码语言:javascript
复制
SQL> create table t1(
  2   if varchar2(111)
  3  );

table T1 created.

SQL> declare
  2    if number;
  3  begin
  4    if := 123;
  5  end;
  6  /
  if number;
  *
ERROR at line 2:
ORA-06550: line 2, column 3: 
PLS-00103: Encountered the symbol "IF" when expecting one of the following:

但是,当我们将if放入双引号(尽量避免)时,一切都会好起来的:

代码语言:javascript
复制
SQL> declare
  2    "if" number;
  3  begin
  4    "if" := 123;
  5  end;
  6  /

anonymous block completed
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20332666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档