2009-04-28 52 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'); 

將無法​​正常工作的原因如上所述。

相關問題