Variables Objeto
Enviado por admin el Mar, 07/07/2009 - 11:15pm.
Definición de Variables Objeto en PL/SQL
Si tenemos tipos definidos en la BBDD, podemos definir variables de este tipo.
Estas variables se pueden definir en PL/SQL y en cualquier sitio donde esté permitido la definición de variables:
customer customer_typ_demo;
Trabajar con Variables Objeto en PL/SQL
Cuando trabajemos con variables objeto, no debemos olvidar que son Objetos:
- Tienen un contructor.
- Se debe diferenciar entre una variable NULL y una variable con un contenido Objeto NULL.
- La variables tipo Varray deben inicializarse y expandir el array al tamaño adecuado antes de acceder al mismo.
- El método implícito count (variable.count) iondica cuantos elementos tiene el array.
- Se accede a los distintos elementos con la sintaxis:
- Si son objetos: variable.campo
- Si son varrays: variable(n)
Ejemplos sencillos:
Con objetos:
CREATE TYPE demo_typ1 AS OBJECT (a1 NUMBER, a2 NUMBER); /
demo demo_typ1; Begin demo.a1 := 4; # ==> ERROR: la variable demo no está inicializada demo := NULL; # demo tiene el valor NULL demo := demo_typ1(2,3); # se debe utilizar el contructor para inicializar la variable demo := demo_typ1(NULL,NULL); # demo está inicializado a un objeto con valores NULL demo.a1 := 4; # correcto: ahora la variable demo ya está inicializada.
Con Varrays:
CREATE TYPE n_integer_type AS VARRAY(5) OF INTEGER; /
integers n_integer_type := NULL; a number; Begin integers(1) := 4; # ==> ERROR: el array integers no tiene dimensión integers := n_integer_type(10, 20, 30); # OK: integers es un array de dimensión 3 con valores 10, 20 ,30 integers(2) := 15; # Cambiamos el valor de un elemento a := integers.count; # a contiene el valor 3 integers.extend(1); # añadimos un elemento al array a := integers.count; # a contiene el valor 4
VARRAYS y Bulk Collect Into
Mediante Bulk Collect Into, podemos leer de forma muy eficiente un conjunto de registros de la BBDD y guardarlos en un VARRAY:
CREATE TYPE demo_type AS OBJECT (A INTEGER, B INTEGER); / CREATE TYPE demo_varray AS VARRAY (1000) OF demo_type; / CREATE TABLE xxx (X1 INTEGER, X2 INTEGER); /
demo_var demo_varray;
Begin
INSERT INTO xxx SELECT * FROM mmm;
SELET X1,X2
BULK COLLECT INTO demo_var
FROM xxx
WHERE ROWNUM <= 1000;
dbms_ouput.print_line('Registros: ' || demo_var.count);
Este Bulk Collect Into llena el array demo_var con hasta 1000 regestros y de una forma muy eficiente.
No confundir con las variables PL
Aunque la sintaxis de utilización puede ser muy parecida, no hay que confundir estas variables con las variables PL:
- RECORD
- PL Tables
