在PL/SQL中。为什么可以将变量(sysdate)命名为保留字(Sysdate)?
例如,
set serveroutput on;
declare sysdate integer := 23;
begin
dbms_output.put_line(sysdate);
end;输出:23,而不是当前日期。
发布于 2013-12-02 16:30:49
仅仅因为sysdate是一个SQL保留字,而不是PL/SQL。SQL和PL/SQL有不同的保留词集。并非所有SQL保留字都是PL/SQL保留字,反之亦然。因此,尽管不建议使用某些SQL保留词作为PL/SQL中的标识符,但不以双引号括起来:
sysdate和(例如) add是SQL保留词,因此我们可以将它们作为PL/add中的变量使用,而不必将它们用双引号括起来:
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 /结果:
aaaaa - 123 但是我们不能创建一个列名为sysdate或add的表。
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:
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放入双引号(尽量避免)时,一切都会好起来的:
SQL> declare
2 "if" number;
3 begin
4 "if" := 123;
5 end;
6 /
anonymous block completedhttps://stackoverflow.com/questions/20332666
复制相似问题