2012-01-25 19 views

Respuesta

10

SET SCAN es obsoleta, pero se usó para controlar si debería o no buscar parámetros/variables de sustitución. OFF evitaría escanear params/variables.

SET DEFINE sustituye/amplía la funcionalidad y una buena valoración crítica está aquí: http://shaharear.blogspot.com/2009/01/set-define.html

Desde el sitio web

conjunto definen en;

seleccione '& hello' desde dual;

Si definir está activado y SQL * Plus encuentra el prefijo de sustitución actual , solicita que se ingrese una cadena. En el siguiente ejemplo, entré: Hasan

Entre el valor para hola: esta cadena se ha introducido

old 1: select '&hello' from dual 
new 1: select 'this string was entered' from dual 

Esto es equivalente a la forma en la vieja SET SCAN funcionaría. Básicamente está controlando si solicita o no una sustitución

+1

¿Está definido DEFINE en ON de forma predeterminada? –

4

En SQL * Plus (y varias otras herramientas que admiten la sintaxis SQL * Plus), de forma predeterminada, la herramienta escanea las sentencias de SQL que buscan variables de sustitución. Esto le permite crear scripts SQL * Plus que usan variables definidas en SQL * Plus para varias tareas de informes.

Porque las variables de sustitución comienzan con el símbolo comercial ('&') y no es necesario que se declaren con antelación, sin embargo, eso crea problemas si intenta ejecutar una instrucción SQL que incluye un ampersand. Por ejemplo, si tiene una declaración INSERT que tiene un literal de cadena que incluye un signo &, no desea que SQL * Plus preprocesa la instrucción. O, si quiero seleccionar la cadena "foo & bar"

SQL> set scan off; 
SQL> ed 
Wrote file afiedt.buf 

    1* select 'foo & bar' from dual 
SQL>/

'FOO&BAR' 
--------- 
foo & bar 

Si permito que SQL * Plus para pre-proceso de la declaración, sin embargo, el texto '& bar' se interpreta como una variable de sustitución y yo 'm se le pida que introduzca el texto a sustituir en tiempo de ejecución

SQL> set scan on 
SQL>/
Enter value for bar: some value 
old 1: select 'foo & bar' from dual 
new 1: select 'foo some value' from dual 

'FOOSOMEVALUE' 
-------------- 
foo some value 
-2

SQL> set de exploración en SQL>/introducir el valor para la barra: un cierto valor de edad 1: seleccione 'foo & bar' de la doble nueva 1: seleccione' foo algún valor 'de dual

'FOOSOMEVALUE' -------------- foo algún valor