Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/07/2014, 21:00
nicolas_dbs
 
Fecha de Ingreso: julio-2014
Mensajes: 2
Antigüedad: 10 años, 5 meses
Puntos: 0
Record + json + nombres de columnas almacenados

Hola a todos,

La consulta es como consultar por el valor RECORD.atributo , pero donde el atributo no lo escribo directamente, sino que lo leo como string.

Quizas la pregunta no es clara, asi que lo explico con codigo.

Lo importante de la consulta lo marco en rojo.

Código:

FOR r_images IN

	SELECT i.*
	FROM idarouter.image i 
	JOIN idarouter.imagequeue iq 
		ON i.idimage_pk = iq.idimage_fk 
LOOP


FOR result IN

	select 
	json_array_elements
	(
		(
		SELECT  rr.jsonrule::json->'wherefields' FROM idarouter.routerules rr where rr.idrouterule_pk = idrouterule_
		)
	) as jsondata
 LOOP
	
	SELECT  result.jsondata->>'column', 
		result.jsondata->>'operator', 
		result.jsondata->>'suboperator', 
		result.jsondata->>'usecasesensitive', 
		result.jsondata->>'value' 
	INTO
		column_, 
		operator_, 
		suboperator_, 
		usecasesensitive_, 
		value_;



RAISE NOTICE 'SHOW THIS :[%]' ,'r_images.'||quote_ident(column_);


-- Lo que busco hacer es esto :
-- IF (r_images.mensaje  = 'HOLA' )
--Como pueden ver, la columna mensaje en realidad es "column_"
--O sea, que dentro de la variable column_ esta el nombre de la columna "mensaje"
--y en otra vuelta será otra columna.

  IF (r_images.column_  = 'HOLA')

      hacer algo;

  END IF;

-- Es claro que no puedo usar directamente r_images.column_.
-- Tambien se , que para ejecutar sentencias a partir  de un string
-- podria usar quote_ident(column_) con EXECUTE, pero eso es
-- en una sentencia, y aca en este caso, estoy tratando de aplicar sobre
-- RECORD.Atributo.

  END LOOP;

END LOOP;
Espero haberme explicado, porque la verdad no se como resolverlo y ya he leido varias lineas de manuales y foros.

Alguna sugerencia ?

Desde ya muchas gracias,