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ć?
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.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
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:
- ze średnikiem (;)
- z ukośnikiem ( / ) na samej linii
- 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.
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)
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