用分号或下一行的斜杠终止Oracle sql语句有什么区别?

ber*_*d_k 8 oracle

在 sql*plus 中执行时,以下两个查询似乎是等效的:

1.

select * from user_tables;
Run Code Online (Sandbox Code Playgroud)

2.

select * from user_tables
/
Run Code Online (Sandbox Code Playgroud)

两个版本有什么区别吗?

Jus*_*ave 11

单个 SQL 语句没有区别。'/' 字符在它自己的行上告诉 SQL*Plus 执行缓冲区中的命令。您可以在大多数 SQL 语句末尾使用分号作为“/”的简写。但是,如果要执行 PL/SQL 块或执行少量 SQL 语句,例如CREATE TYPE,则需要使用“/”

SQL> begin
  2    null;
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> create type foo as object (
  2    col1 number,
  3    col2 number );
  4  /

Type created.
Run Code Online (Sandbox Code Playgroud)

对于如何在脚本中执行多个 SQL 和 PL/SQL 语句,不同的工具可能有略微不同的约定,因此请注意这是 SQL*Plus 特定的。


Joe*_*Joe 5

除了贾斯汀提到的——因为/运行缓冲区中的任何内容,它也可以在编辑上一个命令后使用,甚至只是多次运行相同的命令。

如果你调用edsqlplus,它会尝试AFIEDT.BUF在你的当前目录中写入一个临时文件,然后调出一个编辑器(vi、记事本等),让你编辑最后发送的命令。一个你退出编辑器,你/用来发送修改后的缓冲区。