PostgreSQL - Problemas con comillas en procedimientos almacenad

   
Vista:

Problemas con comillas en procedimientos almacenad

Publicado por GUSTAVO ADOLFO ALZATE (11 intervenciones) el 27/10/2009 15:13:22
Buenos dias, esta es mi duda:

tengo un procedimiento almacenado que ejecuta una consulta como esta:

select p.nombre_pais,
r.nombre,
c.nombre,
l.nom_localidad,
m.nivsocio,
count(m.id) as total
from servcon_manzanas m

INNER JOIN servcon_localidades l ON (m.coddane = l.cod_dane AND m.localidad = l.cod_localidad AND l.cod_localidad IN ('11','01','02','04','06','8','12','13','15'))
INNER JOIN ciudades c ON (m.coddane = c.coddane)
INNER JOIN servcon_regiones r ON (m.codregion = r.cod_region)
INNER JOIN servcon_paises p ON (m.codpais = p.codigo)

where m.coddane = '11001' and
m.localidad IN ('11','01','02','04','06','8','12','13','15') and
m.nivsocio in ('3','2','6','4','5')
group by l.nom_localidad, m.nivsocio,c.nombre,r.nombre,p.nombre_pais
order by m.nivsocio,l.nom_localidad.

Pero los valores de filtro para:

l.cod_localidad IN ('11','01','02','04','06','8','12','13','15')
m.nivsocio in ('3','2','6','4','5')
m.coddane = '11001'

No se como enviarlos como parametro cuando invoco el procedimiento, y tampoco se como colocarlos en el codigo del procedimiento al cual llamo asi:

select * from p_blocks('"11","01","02","04","06","82,"12","13","15"','"2","3","2","6","4","5"','11001')
y no genera error, el query dentro del procedimiento lo cree asi y no genero error tampoco, pero al ejecutar al invocar el procedimiento no genera resultados y estoy esperando 27 filas.

select p.nombre_pais,
r.nombre AS region,
c.nombre AS ciudad,
l.nom_localidad,
m.nivsocio,
count(m.id) as total
from servcon_manzanas m

INNER JOIN servcon_localidades l ON (m.coddane = l.cod_dane AND m.localidad = l.cod_localidad AND l.cod_localidad IN ($1))
INNER JOIN ciudades c ON (m.coddane = c.coddane)
INNER JOIN servcon_regiones r ON (m.codregion = r.cod_region)
INNER JOIN servcon_paises p ON (m.codpais = p.codigo)

where m.coddane = $3 and
m.localidad IN ($1) and
m.nivsocio in ($2)
group by l.nom_localidad, m.nivsocio,c.nombre,r.nombre,p.nombre_pais
order by m.nivsocio,l.nom_localidad

LOOP RETURN NEXT query_result;
END LOOP;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con comillas en procedimientos almace

Publicado por GUSTAVO ADOLFO ALZATE (11 intervenciones) el 28/10/2009 18:20:05
AQUI LES DEJO MI SOLUCION

EL PROCEDIMIENTO ALMACENADO QUEDO ASI:

CREATE OR REPLACE FUNCTION p_get_blocks_count(integer, varchar,varchar,varchar,varchar) RETURNS SETOF type_block_count AS $BODY$
DECLARE
filter ALIAS FOR $1;
list ALIAS FOR $2;
city ALIAS FOR $3;
socioeconomic ALIAS FOR $4;
country ALIAS FOR $5;

sql_query varchar;
query_result type_block_count;
BEGIN
IF filter = 1 THEN
sql_query := 'SELECT *
FROM conteo_manzanas_localidad_'||country||'
WHERE locale_code IN ('||list||') AND
city_code = '||city||' AND
socioeconomic_status IN ('||socioeconomic||')';
FOR query_result IN EXECUTE sql_query LOOP RETURN NEXT query_result;
END LOOP;
ELSE
sql_query := 'SELECT *
FROM conteo_manzanas_barrios_'||country||'
WHERE locale_code IN ('||list||') AND
city_code = '||city||' AND
socioeconomic_status IN ('||socioeconomic||')';
FOR query_result IN EXECUTE sql_query LOOP RETURN NEXT query_result;
END LOOP;
END IF;
RETURN;
END $BODY$
LANGUAGE plpgsql;

SE CREO UN TIPO ASI:

CREATE TYPE type_block_count AS
(country_name varchar,
region_name varchar,
city_name varchar,
locale_name varchar,
locale_code varchar,
socioeconomic_status varchar,
city_code varchar,
total integer)

SE LLAMA AL PROCEDIMIENTO ALMACENADO DE PL/PGSQL ASI:

SELECT *
FROM p_get_blocks_count(1,$$'11','01','02','04','06','8','12','13','15'$$::varchar,'11001',$$'3','2','6','4','5'$$::varchar,'co')
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar