2011-10-16 15 views
6

¿Cuál es la diferencia entre estas dos declaraciones variables?¿Cuál es la diferencia entre las variables de enlace y la variable que ingreso usando &&?

1: num number:='&&num';
2: variable num1 number;

Dado que en ambos casos puedo referencia num utilizando &num o &&num en otros archivos también, y en el caso de variables se unen :num1.

Además, tengo una confusión más: si alguno de los enunciados siguientes difieren de alguna manera, ¿son ambos válidos y tienen el mismo significado?

1: variable num1 number;
2: var num1 number;

Respuesta

29

Parece que tiene algo de confusión sobre las diferencias entre las variables se unen en Oracle y variables de sustitución en SQL * Plus.

Comencemos con las variables de sustitución. Las variables de sustitución son exclusivas de SQL * Plus y no forman parte de la base de datos. No funcionarán si intenta usarlos con JDBC, por ejemplo.

Las variables de sustitución solo pueden contener una parte del texto. Si SQL * Plus se encuentra con una variable de sustitución en una línea de entrada, que reemplazará la variable con su contenido de texto:

 
SQL> define subvar=X 
SQL> select * from dual where dummy = &subvar; 
old 1: select * from dual where dummy = &subvar 
new 1: select * from dual where dummy = X 
select * from dual where dummy = X 
           * 
ERROR at line 1: 
ORA-00904: "X": invalid identifier 

Tenga en cuenta que SQL * Plus sustituyó nuestra variable de sustitución con su valor de texto sin tener en cuenta si se nos dio SQL válido. En el ejemplo anterior, omitimos las comillas simples alrededor de &subvar y nos dio SQL no válido, por lo que obtuvimos un error.

Las líneas que comienzan en old y new nos muestran la línea que ingresamos antes y después de que SQL * Plus aplicara las variables de sustitución. La línea new es la línea que la base de datos intentó ejecutar.

Puede habilitar o deshabilitar la visualización de las líneas old y new utilizando SET VERIFY ON y SET VERIFY OFF. También puede activar o desactivar el reemplazo de variables de sustitución utilizando SET DEFINE ON y SET DEFINE OFF.

Si queremos ejecutar la consulta anterior utilizando la variable de sustitución, hay que poner comillas alrededor de él:

 
SQL> select * from dual where dummy = '&subvar'; 
old 1: select * from dual where dummy = '&subvar' 
new 1: select * from dual where dummy = 'X' 

D 
- 
X 

Si &subvar pasa a contener una cadena que era un número válido (por ejemplo 5), entonces puede escaparse sin utilizar las comillas, pero eso es solo porque sacar el texto &subvar y reemplazarlo por el texto 5 nos da un SQL válido.

Por ejemplo, supongamos que tenemos una tabla llamada test con los datos siguientes en él:

 
     A 
---------- 
     1 
     2 
     3 
     4 
     5 

entonces no podemos hacer

 
SQL> define subvar=5 
SQL> select * from test where a = &subvar; 
old 1: select * from test where a = &subvar 
new 1: select * from test where a = 5 

     A 
---------- 
     5 

variables se unen, por el contrario, tienen tipos. No son simples valores de texto. Sus valores se envían a la base de datos y la base de datos también puede establecer sus valores.

 
SQL> variable bindvar varchar2(1); 
SQL> exec :bindvar := 'X'; 

PL/SQL procedure successfully completed. 

No pones comillas alrededor de una variable se unen cuando se quiere utilizar:

 
SQL> select * from dual where dummy = :bindvar; 

D 
- 
X 

SQL> select * from dual where dummy = ':bindvar'; 

no rows selected 

En el segundo ejemplo anterior, llegamos a ninguna fila devuelta porque la tabla DUAL no tiene filas con la columna DUMMY que contiene el texto :bindvar.

Usted obtendrá un error si se intenta asignar un valor de un tipo erróneo a una variable de vinculación:

 
SQL> variable bindvar number; 
SQL> exec :bindvar := 'X'; 
BEGIN :bindvar := 'X'; END; 

* 
ERROR at line 1: 
ORA-06502: PL/SQL: numeric or value error: character to number conversion error 
ORA-06512: at line 1 

variables se unen son una parte estándar de la base de datos, y se les puede utilizar con JDBC o cualquiera que sea el método de conexión a la base de datos que elija.


Por último, variable num1 number y var num1 number ambos significan lo mismo. Ambos definen una variable de vinculación num1 del tipo number. var es solo una abreviatura de variable.

Cuestiones relacionadas