Почему ORACLE не допускает последовательных символов новой строки в командах? - PullRequest
6 голосов
/ 28 апреля 2009

пишу:

  • : CREATE TABLE Person (
  • : имя CHAR (10),
  • : ssn INTEGER);

и сохраните его в файл "a.sql" (двоеточие представляет начало строки, а не в реальном коде.)

Если я запусту его, введя «@a» в командной строке SQL * Plus, он скажет мне, что строка, начинающаяся с «ssn», не распознается как команда и игнорируется.

Из того, что я понял, кажется, что sqlplus завершает команду, если встречает несколько символов новой строки подряд. Это точное утверждение? Если так, кто-нибудь знает, если это необходимо / почему он решает это сделать?

Ответы [ 3 ]

16 голосов
/ 28 апреля 2009

Я не знаю, почему, но совершенно пустая строка завершает команду в SQL * Plus.

Цитата из SQL * Plus документы :

Завершение SQL-команды : Вы можете завершить команду SQL одним из трех способов:

  • с точкой с запятой (;)
  • с косой чертой (/) на отдельной строке
  • с пустой строкой

Вы также можете изменить способ обработки пустых строк с помощью SET SQLBLANKLINES

SQLBL [ANKLINES] {ON | OFF}

Управляет разрешением SQL * Plus пустых строк в команде или сценарии SQL. ON интерпретирует пустые и новые строки как часть команды или сценария SQL. OFF, значение по умолчанию, не допускает пустых или новых строк в команде SQL или сценарии или сценарии.

Введите BLOCKTERMINATOR, чтобы остановить ввод команды SQL без выполнения команды SQL. Введите символ SQLTERMINATOR, чтобы остановить ввод команды SQL и выполнить инструкцию SQL.

5 голосов
/ 28 апреля 2009

По умолчанию SQLPlus завершает (но не выполняет) оператор, когда вводится пустая строка. Он всегда так делал. Вероятно, это было хорошей идеей в дни, предшествовавшие редакторам экрана и инструментам запросов.

Вы можете изменить это поведение по умолчанию с помощью

установить SQLBLANKLINES на

В этом случае вам нужно будет ввести строку с полной остановкой, чтобы завершить (но не выполнить) оператор.

0 голосов
/ 28 апреля 2011

Но если вы хотите вставить многострочный текст в поле varchar2 или clob, вы можете использовать CHR (10)

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

 insert into t values (
 'Hello,

 How are you');   

не будет работать по причинам, указанным выше.

...