2012-02-01 19 views
26

Tengo un script SQL que insertará una cadena larga en una tabla. La cadena contiene una nueva línea (y esta nueva línea es absolutamente necesaria), de modo que cuando se escribe en un archivo de texto, la consulta se divide en varias líneas. Algo así como:inserte una cadena multilínea en Oracle con sqlplus

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

Line2GoesHere 
blablablabla 
'); 

Esto funciona bien en sapo, pero cuando puedo guardar esto como un archivo .sql y ejecutarlo utilizando sqlplus, se considera cada línea una consulta independiente, lo que significa que cada línea se producirá un error (por culpa insert into table(id, string) values (1, 'Line1goesHere, Line2GoesHere no son guiones bien formateados-

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

¿hay una manera de solucionar este

+1

que he hecho exactamente eso en SQL Plus y funciona.¿Estás ejecutando todo el script, o resaltando esa sección y ejecutándola? – MJB

+0

ah, olvidé decir que lo guardé como un archivo y ejecuté el archivo usando el comando. Edité la descripción de la pregunta –

Respuesta

47

Habilitar SQLBLANKLINES para permitir líneas en blanco en las instrucciones SQL Por ejemplo:.?.

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

blablablabla 
'); 

La premisa de esta pregunta es levemente incorrecta. SQL * Plus permite cadenas de varias líneas de forma predeterminada. Es solo en blanco líneas que causan problemas.

+0

+1 gracias - Aprendí algo nuevo hoy :) –

+0

¿SQLBLANKLINES permanecerá "encendido" para la próxima consulta, o solo afecta a la consulta actual? –

+0

Afecta la sesión completa, desde la conexión hasta el cierre de sesión. Por lo tanto, puede tener que configurarlo o ENCENDIENDO según sea necesario. –

0

Otra forma de insertar saltos de línea a una cadena se concatenando:

chr(13)||chr(10) 

(en Windows)

o simplemente:

chr(10) 

(de lo contrario)

2

SQL * Más manual

Puede terminar un comando SQL en una de tres maneras:

  1. con un punto y coma (;)
  2. con una barra (/) en una línea por sí mismo
  3. con una línea en blanco

Una línea en blanco en una instrucción o script SQL le dice a SQL * Plus que tiene terminado de ingresar el comando, pero no desea ejecutarlo todavía. Presione Regrese al final de la última línea del comando.

En esta situación, la activación de SQLBLANKLINES puede ser la respuesta, pero aun así, debe preocuparse por los siguientes comandos 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 es algo que no se puede apagar; es una característica de SQL * Plus. BLOCKTERMINATOR se puede activar o desactivar. Slash por otro lado si aparece al comienzo de una nueva línea hará que ejecute los contenidos en el búfer. SQL [TERMINATOR] tiene un comportamiento similar.

4

También puede utilizar la función de no-conocida de SQL de 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

Esto es mejor ya que no es SQL * Plus específico. +1. – jpmc26

Cuestiones relacionadas