2008-09-22 20 views

Respuesta

144

Esto puede funcionar para usted:

set define off 

lo contrario, el signo tiene que ser al final de una cadena,

'StackOverflow &' || ' you' 

EDIT: yo era clic-feliz al guardar ... Este se hizo referencia desde un blog.

+2

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

+0

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

2

De acuerdo con this nice FAQ hay un par de soluciones.

También puede escapar del signo y con el carácter de barra diagonal inversa \ si puede modificar el comentario.

+2

El escape de barra diagonal inversa no funciona en SQL * Plus o SQLDeveloper –

+0

@JimTough Lo hace después de activarlo con 'set escape on' –

21

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

+0

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

+0

JoshL, está en lo correcto Acabo de enumerar esto para que esté completo. Está relacionado con tu pregunta, aunque no responde directamente a tu pregunta específica. –

+0

Realmente me ayudó. –

8

resolví con el código de abajo:

set escape on 

y poner un \ lado & en la izquierda 'value_\&_intert'

Att

+0

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

4

Puede establecer el carácter especial, que se buscó después de la ejecución de un script, a otro valor mediante el uso de SET DEFINE <1_CHARACTER>

Por defecto, el DEFI NE función en sí está en, y se establece en &

Se puede apagar - como ya se ha mencionado - pero se puede evitar, así, mediante el establecimiento a un valor diferente. Sé muy consciente de a qué signo lo configuraste. 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> 
+0

Recientemente he usado este enfoque. Me gusta, ya que no requiere que modifique el contenido de mis paquetes PL/SQL. – Drumbeg

3

conjunto definen fuera < - Esta es la mejor solución que encontré

También probé ...

conjunto definen}

pude insertar varios registros que contienen caracteres ampersand '&' pero no puedo usar el caracter '}' en el texto Así que decidí usar "definir definición desactivada" y todo funciona como debería.

Cuestiones relacionadas