VARIABLES BIND
Estas variables tienen la particularidad de poder ser definidas en sqlplus, usadas y/o asignadas dentro de nuestros programas PL/SQL y luego leídas una vez terminado el programa. Son convenientes cuando queremos tener comunicación entre scripts de sqlplus y bloques de PL/SQL.
Las variables bind se definen así:
SQL> VARIABLE bvar NUMBER;Pueden utilizarse también los tipos: CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, BINARY_FLOAT y BINARY_DOUBLE
Si queremos asignar estas variables antes de llamar a nuestros bloques de PL/SQL, debemos hacerlo desde otro bloque BEGIN END o simplemente usando la sentencia EXEC:
SQL> exec :bvar := 1;
PL/SQL procedure successfully completed.
Las variables dentro de PL/SQL se referencian con dos puntos seguidos del nombre de la misma.
Ahora ya podemos utilizar las variables dentro de nuestro programa e imprimir el resultado:
SQL> BEGINPL/SQL procedure successfully completed.
2 IF :bvar = 1 THEN
3 :bvar := 0;
4 ELSE
5 :bvar := 1;
6 END IF;
7 END;
8 /
SQL> print bvar
BVAR
----------
0
SQL> /
PL/SQL procedure successfully completed.
SQL> print bvar
BVAR
----------
1
Y con esto culminamos el repaso de variables en sql*plus. Finalmente como complemento, veremos brevemente los cursores referenciales los cuales son también útiles para recuperar un conjunto de tuplas de nuestros SELECTs, desde los programas PL/SQL hacia fuera, y así tener más flexibilidad.
REFCURSORS
Se declaran como una variable bind, pero colocamos REFCURSOR en el tipo:
SQL> VARIABLE rcur REFCURSOR;
SQL> begin
2 OPEN :rcur FOR select segment_name, segment_type from user_segments order by segment_name;
3 end;
4 /
PL/SQL procedure successfully completed.
A diferencia de los cursores tradicionales que se abren y requieren del uso de fetch, al abrir estos cursores bind ya son ejecutados automáticamente y sus resultados almacenados en memoria. Solo resta imprimir las filas de la consulta.
SQL> print rcur
SEGMENT_NAME SEGMENT_TYPE
-------------------- ------------------
ACUMULADO_CONSUMO TABLE
BIG_TABLE TABLE
BIG_TABLE_PK INDEX
CLIENTE TABLE
COUNTRY_C_ID_PK INDEX
CUENTA TABLE
INVENTARIO TABLE
IX_T INDEX
MUNICIPIO TABLE
NDX_ACUMCON INDEX
NDX_ACUMRENT INDEX
NDX_ACUMTERC INDEX
NDX_ACUMVAR INDEX
13 rows selected.
Ver también:
Variables en SQLPlus (parte 1) - Sobre variables de usuario
Variables en SQLPlus (parte 2) - Sobre variables de sustitución
3 comentarios:
Muchas gracias. Muy buen artìculo..Alvaro
Realmente el atículo esta genial. Gracias por publicarlo.
Muy bueno.
Muchas gracias!
Publicar un comentario