Вставить многострочную строку в 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.
Есть ли способ исправить это?
Ответы
Ответ 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)
(в противном случае)