Подтвердить что ты не робот

Вставить многострочную строку в Oracle с sqlplus

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

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

Line2GoesHere 
blablablabla
');

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

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

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

4b9b3361

Ответ 1

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

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

blablablabla
');

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

Ответ 2

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

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

Q'[FDFGDFKLGDFKJGDSDFFDSLKDFLKGJDGLKGLFDGLKJDGKLDJ]'
----------------------------------------------------
f dfgdfklgdfkjgd
sdffdslkdflkgj dglk
glfdglkjdgkldj

Ответ 3

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

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

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

Пустая строка в инструкции SQL или script указывает 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] имеет аналогичное поведение.

Ответ 4

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

chr(13)||chr(10)

(на окнах)

или просто:

chr(10)

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