вставить многострочную строку в Oracle с помощью sqlplus - PullRequest
31 голосов
/ 01 февраля 2012

У меня есть SQL-скрипт, который вставит длинную строку в таблицу.Строка содержит новую строку (и эта новая строка абсолютно необходима), поэтому, когда она записана в текстовом файле, запрос разбивается на несколько строк.Что-то вроде:

insert into table(id, string) values (1, 'Line1goesHere 

Line2GoesHere 
blablablabla
');

Это нормально работает в Toad, но когда я сохраняю это как файл .sql и запускаю его с использованием sqlplus, он считает каждую строку отдельным запросом, что означает, что каждая строка будет неудачной (потому чтоinsert into table(id, string) values (1, 'Line1goesHere, Line2GoesHere - плохо отформатированные сценарии.

SP2-0734: unknown command beginning "Line2GoesHere" - rest of line ignored.

Есть ли способ исправить это?

Ответы [ 4 ]

50 голосов
/ 01 февраля 2012

Включить SQLBLANKLINES, чтобы разрешить пустые строки в операторах SQL. Например:

SET SQLBLANKLINES ON
insert into table(id, string) values (1, 'Line1goesHere 
Line2GoesHere 

blablablabla
');

Предпосылка этого вопроса несколько ошибочна. SQL * Plus разрешает многострочные строки по умолчанию. Только пустые строки вызывают проблемы.

8 голосов
/ 26 февраля 2016

Вы также можете использовать малоизвестную функцию Oracle SQL: Строки в кавычках в стиле Perl.

SQL> select q'[f dfgdfklgdfkjgd
  2  sdffdslkdflkgj dglk
  3  glfdglkjdgkldj ]'
  4  from dual;

Q'[FDFGDFKLGDFKJGDSDFFDSLKDFLKGJDGLKGLFDGLKJDGKLDJ]'
----------------------------------------------------
f dfgdfklgdfkjgd
sdffdslkdflkgj dglk
glfdglkjdgkldj
4 голосов
/ 26 февраля 2016

SQL * Plus Руководство

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

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

Пустая строка в операторе SQL или скрипте говорит SQL * Plus, что у вас есть закончил ввод команды, но пока не хочу ее запускать. Нажмите Вернитесь в конец последней строки команды.

Включение SQLBLANKLINES в этой ситуации может быть ответом, но даже при этом вам все равно придется беспокоиться о следующих командах SQL * Plus.

@  ("at" sign)        (Start of line) 
@@ (double "at" sign) (Start of line) 
#   SQLPREFIX         (Start of line)
.   BLOCKTERMINATOR   (Start of line and by itself)
/  (slash)            (Start of line and by itself)
;   SQLT[ERMINATOR]   (Start of line and by itself, or at the end)

SQLPREFIX - это то, что вы не можете отключить; это особенность SQL * Plus. BLOCKTERMINATOR может быть активирован или деактивирован. Косая черта, с другой стороны, если она появляется в начале новой строки, заставит ее выполнить содержимое в буфере. SQL [TERMINATOR] имеет похожее поведение.

1 голос
/ 01 февраля 2012

Другой способ вставки новых строк в строку - это конкатенация:

chr(13)||chr(10)

(на окнах)

или просто:

chr(10)

(в противном случае)

...