¿Cómo ignoro los símbolos de unión en un script SQL que se ejecuta desde SQL Plus?


104

Tengo un script SQL que crea un paquete con un comentario que contiene un ampersand (&). Cuando ejecuto el script desde SQL Plus, se me solicita que ingrese un valor sustituto para la cadena que comienza con &. ¿Cómo desactivo esta función para que SQL Plus ignore el signo comercial?

Respuestas:


181

Esto puede funcionar para usted:

set define off

De lo contrario, el ampersand debe estar al final de una cadena,

'StackOverflow &' || ' you'

EDITAR: Estaba feliz de hacer clic al guardar ... Esto fue referenciado desde un blog .


2
También puede especificar esto en el archivo de configuración del perfil del sitio glogin.sql o en el archivo de configuración del perfil de usuario login.sql
David Aldridge

Esta es la solución más simple si no está interesado en las variables de sustitución.
Drumbeg

Siempre una solución que salva vidas :) Gracias.
Anjana Silva

25

Si a veces utiliza variables de sustitución, es posible que no desee desactivar la definición. En estos casos, podría convertir el ampersand de su equivalente numérico como en || Chr(38) ||o agregarlo como un solo carácter como en || '&' ||.


El escenario específico es un paquete cuya fuente incluye un ampersand en un comentario. No veo cómo usaría la concatenación o la sustitución para esto.
JoshL

JoshL, tienes razón. Acabo de enumerar esto para que esté completo. Está relacionado con su pregunta aunque no responde directamente a su pregunta específica.
Leigh Riffel

Realmente me ayudó.
Archimedes Trajano

13

Lo resolví con el siguiente código:

set escape on

y poner \ al lado de & a la izquierda 'value_\&_intert'

Att


Esto funcionó para mí. Estaba usando el comando comment on column tablename.columnname is 'war ' || chr(38) || ' peace'pero me estaba dando el error ORA-01780: string literal required.
mrswadge

6

Puede establecer el carácter especial, que se busca al ejecutar un script, en otro valor mediante el uso de SET DEFINE <1_CHARACTER>

De forma predeterminada, la función DEFINE está activada y está configurada en &

Se puede apagar, como ya se mencionó, pero también se puede evitar estableciendo un valor diferente. Sea muy consciente de la señal que le asignó. En el siguiente ejemplo, elegí el carácter #, pero esa elección es solo un ejemplo.

SQL> select '&var_ampersand #var_hash' from dual;
Enter value for var_ampersand: a value

'AVALUE#VAR_HASH'
-----------------
a value #var_hash

SQL> set define #
SQL> r
  1* select '&var_ampersand #var_hash' from dual
Enter value for var_hash: another value

'&VAR_AMPERSANDANOTHERVALUE'
----------------------------
&var_ampersand another value

SQL>

1
Yo mismo he utilizado este enfoque recientemente. Me gusta porque no me obliga a modificar el contenido de mis paquetes PL / SQL.
Drumbeg

3

set define off <- Esta es la mejor solución que encontré

También probé ...

establecer definir}

Pude insertar varios registros que contenían los caracteres '&' pero no puedo usar el carácter '}' en el texto. Así que decidí usar "set define off" y todo funciona como debería.



0

Tenía una declaración CASE con WHEN column = 'sometext & more text' THEN ....

Lo reemplacé con CUANDO column = 'sometext' || CHR (38) || 'más texto' ENTONCES ...

también puede usar CUANDO la columna COMO 'algún texto _ más texto' ENTONCES ...

(_ es el comodín para un solo carácter)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.