2009-04-28 49 views
6

我写:为什么ORACLE不允许在命令中使用连续的换行符?

  • :CREATE TABLE人(
  • :名称CHAR(10),
  • :为ssn INTEGER);

,并将其保存到文件“a.sql”(冒号表示行首,是不是在实际的代码)。

如果我再通过在SQL输入“@a”运行* Plus命令提示符下,它会告诉我,以“ssn”开头的行不会被识别为命令,并且会被忽略。

从我收集的内容看,如果sqlplus在一行中遇到多个换行符时似乎会终止命令。这是一个准确的陈述吗?如果是这样,有谁知道这是否有必要/为什么选择这样做?

回答

15

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

the SQL*Plus docs

报价:

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

  • 用分号(;)
  • 以斜杠(/)
  • 用空行

您也可以更改空行与SET SQLBLANKLINES被视为

SQLBL [ANKLINES] {ON | OFF}

控制SQL * Plus是否允许一个SQL命令或脚本中的空行。 ON将空白行和新行解释为SQL命令或脚本的一部分。 OFF(默认值)不允许空白行或SQL命令或脚本或脚本中的新行。

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

5

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

您可以在

在这种情况下,你必须输入一个符合只是一个句号终止(但不执行)的声明改变与

集SQLBLANKLINES默认行为。

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'); 

将无法​​正常工作的原因如上所述。

相关问题