Laz*_*zer 16 oracle oracle-11g-r2 sqlplus
一些语句,如 create table、insert into 等,在末尾使用分号:
CREATE TABLE employees_demo
( employee_id NUMBER(6)
, first_name VARCHAR2(20)
, last_name VARCHAR2(25)
CONSTRAINT emp_last_name_nn_demo NOT NULL
) ;
Run Code Online (Sandbox Code Playgroud)
而其他人喜欢
set echo on
connect system/manager
Run Code Online (Sandbox Code Playgroud)
也不要分号。
这背后的原因是什么?我如何决定自己在哪里放分号,在哪里不放?
当您在 SQL*Plus 中输入一条 SQL 语句时,它需要知道您何时完成了它,尤其是当该命令跨越多行时。因此,它需要一个终端字符可以与设置字符set sqlterminator。默认情况下,此字符是分号:
SQL> select *
2 from
3 dual;
D
-
X
Run Code Online (Sandbox Code Playgroud)
现在,将此终端字符更改为 a #:
SQL> set sqlterminator #
SQL> select *
2 from
3 dual#
D
-
X
Run Code Online (Sandbox Code Playgroud)
SQL 语句以#.
你问:为什么set sqlterminator #后面没有分号?回答,因为这不是 SQL 语句。与 SQL*Plus 及其行为、输出、连接 asf(例如set echo on和connect system/manager)相关的语句不是 SQL 语句,因此输入时不带分号。
这和 有什么关系/?
当您输入一条 SQL 语句时,SQL*plus 填充了它所谓的缓冲区。可以使用以下list命令显示此缓冲区:
SQL> list
1 select *
2 from
3* dual
SQL>
Run Code Online (Sandbox Code Playgroud)
(注:我只输入list,其余返回)
在/现在执行什么是目前在缓冲区中。让我们试试:
SQL> /
D
-
X
Run Code Online (Sandbox Code Playgroud)
可以看出,执行了相同的查询。