wstawianie wielowierszowego ciągu w Oracle za pomocą sqlplus

Mam skrypt SQL, który wstawi długi łańcuch do tabeli. Łańcuch zawiera nową linię (I Ta nowa linia jest absolutnie niezbędna), więc gdy jest zapisany w pliku tekstowym, zapytanie jest podzielone na wiele linii. Coś w stylu:

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

Line2GoesHere 
blablablabla
');

To działa ok w Toad, ale kiedy zapisać to jako .plik sql i uruchom go za pomocą sqlplus, uważa każdą linię osobne zapytanie, co oznacza, że każda linia zawiedzie (beacuse insert into table(id, string) values (1, 'Line1goesHere, Line2GoesHere nie są dobrze sformatowane Skrypty.

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

Jest jak to naprawić?

Author: marcospereira, 2012-02-01

4 answers

Włącz SQLBLANKLINES, Aby zezwolić na puste linie w poleceniach SQL. Na przykład:

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

blablablabla
');
Przesłanka tego pytania jest nieco błędna. SQL * Plus domyślnie dopuszcza ciągi Wielowierszowe. Tylko puste linie powodują problemy.
 49
Author: jim mcnamara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-26 17:38:12

Możesz również użyć niezbyt znanej funkcji Oracle SQL: cytowane ciągi w stylu Perla.

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

Q'[FDFGDFKLGDFKJGDSDFFDSLKDFLKGJDGLKGLFDGLKJDGKLDJ]'
----------------------------------------------------
f dfgdfklgdfkjgd
sdffdslkdflkgj dglk
glfdglkjdgkldj
 6
Author: ibre5041,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-04 10:58:35

SQL*Plus Manual

Możesz zakończyć polecenie SQL na jeden z trzech sposobów:

  1. ze średnikiem (;)
  2. z ukośnikiem ( / ) na samej linii
  3. z pustą linią

Pusta linia w instrukcji SQL lub skrypcie mówi SQL * Plus, że masz zakończyłem wprowadzanie polecenia, ale nie chcę go jeszcze uruchamiać. Prasa Return na końcu ostatniego wiersza polecenia.

Włączanie SQLBLANKLINES w tej sytuacji może być odpowiedź, ale nawet z nim nadal musisz martwić się o następujące polecenia 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 jest czymś, czego nie można wyłączyć; jest to funkcja SQL * Plus. BLOCKTERMINATOR może być aktywowany lub wyłączony. Ukośnik z drugiej strony, Jeśli pojawi się na początku nowej linii spowoduje uruchomienie zawartości w buforze. SQL [TERMINATOR] ma podobne zachowanie.

 3
Author: Chad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-02 02:54:34

Innym sposobem wstawiania nowych linii do łańcucha jest konkatenacja:

chr(13)||chr(10)

(w systemie windows)

Lub po prostu:

chr(10)

(inaczej)

 0
Author: A.B.Cade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-01 06:28:15