Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/10/2010, 14:30
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Sentencia DML dinamica.

Buen día foreros.
Les cuento
Tengo un procedimiento con un tipo de dato definido por mi.
CREATE TYPE ejemplo AS (campo1 double precision[],campo2 integer[]);
Tengo un procedimiento que me retorna un array de este tipo y lo almaceno en una variable dentro de otro procedimiento.
DECLARE
variable1 ejemplo[];
BEGIN
variable1 := funcion_retorna_tipo_de_dato_ejemplo(campo1,campo2 );


Quiero almacenar en una tabla temporal (creada con nombre aleatorio mientras dura la sesión) el valor de variable1.
EXECUTE 'CREATE TEMPORARY TABLE ' || nombre_aleatorio || '(campo1 text,campo2 ejemplo[])';

La tabla se crea bien.... pero cuando trato de hacer esto:
EXECUTE 'INSERT INTO ' || nombre_aleatorio || ' VALUES(''t_1_2'',' || variable1 || ')';
Me genera error. este error se da por que el execute tiene como sentencia de ejecución un text y asi mismo me toma mi tipo de dato ejemplo[].

Si no tuviese que hacer el nombre de la tabla temporal dinamico sería tan sencillo como esto:
INSERT INTO tabla VALUES('t_1_2',variable1);

Existe alguna forma de cambiar el formato de salida de un array? que no sea {{1,2},{3,4}} sino array[[1,2],[3,4]]?
O en ultimas, poder hacer funcionar una sentencia EXECUTE que me tome la variable como el tipo de dato real?

Espero me hayan entendido.

Muchas gracias
__________________
Without data, You are another person with an opinion.
W. Edwads Deming