为什么ORACLE不允许命令中的连续换行符?

时间:2009-04-28 03:17:22

标签: sql oracle language-design whitespace sqlplus

我写道:

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

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

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

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

3 个答案:

答案 0 :(得分:16)

我不知道原因,但是一个完全空白的行终止了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语句。

答案 1 :(得分:5)

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

您可以使用

更改默认行为

上设置SQLBLANKLINES

在这种情况下,你必须输入一个只有句号的行来终止(但不执行)一个语句。

答案 2 :(得分: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');   

由于上述原因而无效。