bueno, ya logre resolver todo mi acertijo, la clave para concatenar en una variable, comillas + un valor variable + texto + comillas fue con: E'\''
AQUI PEGO EL CODIGO RESULTANTE DE MI PROCEDIMIENTO ALMACENADO Y COMENTADITO
Código SQL:
Ver originalCREATE OR REPLACE FUNCTION p_get_range_date_to_billing(INTEGER) RETURNS VARCHAR AS
$BODY$
DECLARE
customer ALIAS FOR $1;
sql_query VARCHAR;
start_day INTEGER;
days_to_use INTEGER;
dates CHARACTER VARYING;
state CHARACTER VARYING;
diference INTEGER;
myCursor refcursor;
register RECORD;
register2 RECORD;
aux VARCHAR;
var_string VARCHAR;
other_string VARCHAR;
BEGIN
--INICIO CONSULTA PARA OBTENER EL DIA DE INICIO DE LA FACTURACION Y LA CANTIDAD DE DIAS A FACTURAR 30 - 60
state := $$'A'$$;
sql_query := 'SELECT start_day_to_use, (days_to_use - 1) AS days_to_use
FROM contract
WHERE state = '||state||' AND fk_pk_customer =996';
OPEN myCursor FOR EXECUTE sql_query;
FETCH myCursor INTO register;
start_day := register.start_day_to_use;
days_to_use := register.days_to_use;
CLOSE myCursor;
--QUERY PARA OBTENER EL DIA ACTUAL
SELECT INTO register2 (EXTRACT (DAY FROM CURRENT_DATE)::INTEGER) AS current_day;
--CALCULOS, CUANDO EL DIA ACTUAL ES MENOR QUE EL DIA DE INICIO DE LA FACTURACION
--INDICA QUE EL DIA ACTUAL PERTENECE AL MES SIGUIENTE DEL DIA DE INICIO DE LA FACTURACION
IF register2.current_day < start_day THEN
diference := start_day - register2.current_day;
aux := $$'1 MONTHS'$$;
var_string := E'\''||diference||E' DAYS\''; -- SE CONCATENA Y SE OBTIENE UN RESULTATE TIPO '8 DAYS'
sql_query := 'SELECT ((CURRENT_DATE - INTERVAL '||aux||') + INTERVAL '||var_string||')::date AS start_date';
OPEN myCursor FOR EXECUTE sql_query;
FETCH myCursor INTO register;
dates := register.start_date;
CLOSE myCursor;
other_string := E'\''||days_to_use||E' DAYS\''; -- SE CONCATENA Y SE OBTIENE UN RESULTATE TIPO '30 DAYS'
sql_query := 'SELECT (((CURRENT_DATE - INTERVAL '||aux||') + INTERVAL '||var_string||') + INTERVAL '||other_string||')::date AS end_date';
OPEN myCursor FOR EXECUTE sql_query;
FETCH myCursor INTO register;
dates := dates || ','|| register.end_date;
CLOSE myCursor;
ELSE -- EL MES ACTUAL ES EL MISMO DEL MES DEL DIA DE INICIO DE LA FACTURACION
diference := register2.current_day - start_day;
var_string := E'\''||diference||E' DAYS\''; -- SE CONCATENA Y SE OBTIENE UN RESULTATE TIPO '10 DAYS'
sql_query := 'SELECT (CURRENT_DATE - INTERVAL '||var_string||')::date AS start_date';
OPEN myCursor FOR EXECUTE sql_query;
FETCH myCursor INTO register;
dates := register.start_date;
CLOSE myCursor;
aux := E'\''||days_to_use||E' DAYS\''; -- SE CONCATENA Y SE OBTIENE UN RESULTATE TIPO '30 DAYS'
sql_query := 'SELECT ((CURRENT_DATE - INTERVAL '||var_string||') + INTERVAL '||aux||')::date AS end_date';
OPEN myCursor FOR EXECUTE sql_query;
FETCH myCursor INTO register;
dates := dates || ','|| register.end_date;
CLOSE myCursor;
END IF;
RETURN dates;
END $BODY$ LANGUAGE 'plpgsql' VOLATILE;
SELECT p_get_range_date_to_billing(996);
de todos modos no estoy 100% satisfecho con el codigo realizado, si alguien me puede dar ideas acerca de como optimizarlo y/o hacerlo mas entendible, seria genial.
Muchas Gracias.