miércoles, 7 de noviembre de 2007

Variables en SQL*Plus (parte 3)

Anteriormente repasando variables en sqlplus, vimos las variables de sustitución y las de usuario. Finalmente llegamos al tercer tipo de variables, las variables bind (o de ligadura).

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> BEGIN
2 IF :bvar = 1 THEN
3 :bvar := 0;
4 ELSE
5 :bvar := 1;
6 END IF;
7 END;
8 /
PL/SQL procedure successfully completed.

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:

Anónimo dijo...

Muchas gracias. Muy buen artìculo..Alvaro

Anónimo dijo...

Realmente el atículo esta genial. Gracias por publicarlo.

Mujeres con (y sin) tacos dijo...

Muy bueno.
Muchas gracias!