insérez une chaîne de caractères multilignes dans Oracle avec sqlplus

j'ai un script SQL qui insérera une longue chaîne dans une table. La chaîne contient une nouvelle ligne (et cette nouvelle ligne est absolument nécessaire), donc quand elle est écrite dans un fichier texte, la requête est divisée en plusieurs lignes. Quelque chose comme:

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

Line2GoesHere 
blablablabla
');

cela fonctionne bien dans Crapaud, mais quand je le sauve comme un .sql fichier et de l'exécuter à l'aide de sqlplus, il considère chaque ligne d'une requête distincte, ce qui signifie que chaque ligne sera un échec (car insert into table(id, string) values (1, 'Line1goesHere, Line2GoesHere ne sont pas bien formaté script.

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

y a-t-il un moyen d'arranger ça?

28
demandé sur marcospereira 2012-02-01 06:50:26

4 réponses

Activer SQLBLANKLINES pour autoriser les lignes vides dans les instructions SQL. Par exemple:

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

blablablabla
');

la prémisse de cette question est légèrement fausse. SQL*Plus autorise les chaînes multilignes par défaut. C'est seulement vide les lignes qui causent des problèmes.

49
répondu jim mcnamara 2016-02-26 17:38:12

Vous pouvez également utiliser la fonctionnalité peu connue du SQL D'Oracle:Perl style chaînes entre guillemets.

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

Q'[FDFGDFKLGDFKJGDSDFFDSLKDFLKGJDGLKGLFDGLKJDGKLDJ]'
----------------------------------------------------
f dfgdfklgdfkjgd
sdffdslkdflkgj dglk
glfdglkjdgkldj
6
répondu ibre5041 2016-03-04 10:58:35

SQL * Plus Manuel

vous pouvez mettre fin à une commande SQL de trois façons:

  1. avec un point-virgule (;)
  2. avec une barre oblique (/) sur une ligne
  3. avec une ligne vide

une ligne vide dans une instruction ou un script SQL indique à SQL * Plus que vous avez terminé la saisie de la commande, mais ne veulent pas courir encore. Appuyer De retour à la fin de la dernière ligne de la commande.

activer SQLBLANKLINES dans cette situation peut être la réponse, mais même avec cela, vous devez toujours vous soucier des commandes SQL*Plus suivantes.

@  ("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 est quelque chose que vous ne pouvez pas désactiver; C'est une fonctionnalité de SQL*Plus. BLOCKTERMINATOR peut être activé ou désactivé. Slash d'autre part, si elle apparaît au début d'une nouvelle ligne fera exécuter le contenu dans la mémoire tampon. SQL [TERMINATOR] a un comportement similaire.

3
répondu Chad 2017-04-02 02:54:34

une autre façon d'insérer des lignes à une chaîne est de concaténer:

chr(13)||chr(10)

(sous windows)

ou tout simplement:

chr(10)

(sinon)

0
répondu A.B.Cade 2012-02-01 06:28:15