8

我写:

CREATE TABLE Person ( 
name CHAR(10),

ssn INTEGER);

并将其保存到文件“a.sql”中。

如果我随后在 SQL*Plus 命令提示符中键入“@a”来运行它,它会告诉我以“ssn”开头的行未被识别为命令,并被忽略。

据我所知,如果 sqlplus 连续遇到多个换行符,它似乎会终止命令。这是一个准确的说法吗?如果是这样,有谁知道这是否有必要/为什么选择这样做?

4

3 回答 3

18

我不知道为什么,但是一个完全空白的行终止了 SQL*Plus 中的一个命令。

引用SQL*Plus 文档

结束 SQL 命令:您可以通过以下三种方式之一结束 SQL 命令:

  • 带分号 (;)
  • 在一行上单独带有斜杠 (/)
  • 有一个空行

您还可以使用 SET SQLBLANKLINES 更改处理空行的方式

SQLBL[ANKLINES] {开|关}

控制 SQL*Plus 是否允许在 SQL 命令或脚本中使用空行。ON 将空行和新行解释为 SQL 命令或脚本的一部分。OFF,默认值,不允许在 SQL 命令或脚本或脚本中出现空行或新行。

输入 BLOCKTERMINATOR 以停止 SQL 命令条目而不运行 SQL 命令。输入 SQLTERMINATOR 字符以停止 SQL 命令输入并运行 SQL 语句。

于 2009-04-28T04:04:12.563 回答
5

默认情况下,当输入空行时,SQLPlus 会终止(但不执行)语句。它一直这样做。在屏幕编辑器和查询工具出现之前,这似乎是个好主意。

您可以使用更改该默认行为

将 SQLBLANKLINES 设置为

在这种情况下,您必须输入仅包含句号的行来终止(但不执行)语句。

于 2009-04-28T03:57:25.077 回答
0

但是如果您想在 varchar2 或 clob 字段中插入多行文本,您可以使用 chr(10)

 insert into t values ('Hello,'||chr(10)||chr(10)||' How are you?');

 insert into t values (
 'Hello,

 How are you');   

由于上述原因无法正常工作。

于 2011-04-28T17:30:42.360 回答