2012-02-01 1 views
26

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

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

Line2GoesHere 
blablablabla 
'); 

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

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

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

+1

Я сделал точно, что в SQL Plus и она работает.Вы используете весь скрипт или выделяете этот раздел и запускаете его? – MJB

+0

ах, я забыл сказать, что я сохранил его как файл и запустил файл с помощью команды. Я отредактировал вопрос об –

ответ

47

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

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

blablablabla 
'); 

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

+0

+1 спасибо - я узнал что-то новое сегодня :) –

+0

Будет ли SQLBLANKLINES оставаться включенным для следующего запроса или это только влияет на текущий запрос? –

+0

Это влияет на весь сеанс - от подключения к выходу. Поэтому вам может потребоваться установить его в положение OFF или ON по необходимости. –

0

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

chr(13)||chr(10) 

(на окнах)

или просто:

chr(10) 

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

2

SQL * Плюс Руководство

Вы можете закончить команду 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] имеет аналогичное поведение.

4

Вы также можете использовать не-хорошо известная особенность SQL в Oracle: Perl style quoted strings.

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

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

Это лучше, поскольку это не SQL * Plus. +1. – jpmc26