Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/05/2012, 16:27
Brahyam
 
Fecha de Ingreso: enero-2005
Mensajes: 122
Antigüedad: 21 años, 8 meses
Puntos: 2
Acceder a los valores de un array multidimensional en psql

Buenas tardes.

Tengo la siguiente funcion que me crea un array multidimensional:

Código PHP:
CREATE OR REPLACE FUNCTION traer_valores_sop(integer, integer) RETURNS text[][] AS
$BODY$
declare 
nombres text[];
valores text[];
identi integer[];
posiciones text[][];
retorno record;
i integer;
j integer;

begin

select array_agg
(valor), array_agg(nombre), array_agg(ident) into valores, nombres, identi from (SELECT (select variables_servicios_id from variables_servicios where variables_servicios_id = vvs.variables_servicios_id) as ident, valor, (select nombre_dato from variables_servicios where variables_servicios_id = vvs.variables_servicios_id) as nombre from valores_variables_servicios vvs where sop_integral_id = $1 AND tipo_operacion_logistica_id = $2) as f;

i:=0;

for 
j IN 1..array_upper(nombres, 1) loop
 
    i
:=i+1;
    
posiciones[identi[i]] := array[nombres[i],valores[i]];
  
end loop;

return 
posiciones;

end;
$BODY$
  
LANGUAGE plpgsql VOLATILE;
$$
LANGUAGE plpgsql; 
Funciona perfecto.
Le doy
Código PHP:
SELECT * from traer_valores_sop(180000001, 180000004) 
y me sale esto:
Código PHP:
[180000075:180000145]={"{tipo_carga_dangerous_good,t}","{tipo_carga_imo,t}",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"{mode_transport_air,t}","{mode_transport_pieces,34}","{mode_transport_weight,4}","{mode_transport_dims,5}","{mode_transport_vol,3}","{mode_transport_oversize,2}",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"{otm,f}","{dta,f}","{inland,f}","{insurance,f}",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"{insurance_percent,40}"} 
Fíjense en las comillas que pone, yo no las he puesto y se me hace que por eso no me sale.

Cuando intento sacar un dato asi:

Código PHP:
SELECT g[180000090][1] from traer_valores_sop(180000001, 180000004) as g; 
me sale vacio y se supone que me debería traer el dato que está en esa dimensión y en la posición 1.

Que será lo que estoy haciendo mal?

Gracias