el codigo es el siguiente:
Código SQL:
Ver original
CREATE OR REPLACE FUNCTION p_get(INTEGER) RETURNS SETOF CHARACTER VARYING AS $BODY$ DECLARE customer ALIAS FOR $1; sql_query VARCHAR; start_day INTEGER; days_to_use INTEGER; dates CHARACTER VARYING; diferenre INTEGER; query_result t_list; BEGIN sql_query := ' SELECT INTO register start_day_to_use, (days_to_use - 1) AS days_to_use FROM contract WHERE state = $$'A'$$ AND fk_pk_customer = '||customer; EXECUTE sql_query; start_day := register.start_day_to_use; days_to_us := register.days_to_use; SELECT INTO register EXTRACT (DAY FROM CURRENT_DATE)::INTEGER AS current_day; IF register.current_day < start_day THEN diference := start_day - register.current_day; sql_query := "SELECT INTO register((CURRENT_DATE - INTERVAL '1 MONTHS') + INTERVAL '"||diference||"DAYS')::date AS start_date"; EXECUTE sql_query; dates := register.start_date; sql_query := "SELECT INTO register (((CURRENT_DATE - INTERVAL '1 MONTHS') + INTERVAL '"||diference||"DAYS') + INTERVAL '"||days_to_use||"')::date AS end_date"; EXECUTE sql_query; dates := dates || ','|| register.end_date; ELSE diference := register.current_day - start_day; sql_query := "SELECT INTO register(CURRENT_DATE - INTERVAL '"||diference||" DAYS')::date AS start_date"; EXECUTE sql_query; dates := register.start_date; sql_query := "SELECT INTO register((CURRENT_DATE - INTERVAL '"||diference||" DAYS') + INTERVAL '"||days_to_use||" DAYS') AS end_date"; EXECUTE sql_query; dates := dates || ','|| register.end_date; END IF; SELECT RETURN dates; END $BODY$ LANGUAGE 'plpgsql' VOLATILE; SELECT p_get(996);
en el primer query es para obtener el dia de cada mes en el cual se empieza un nuevo ciclo de facturacion para un cliente, junto con la cantidad de dias que se han de facturar 30 o 60.
de resto son para calcular la fecha de inicio y final dependiendo de esta cantidad de dias a facturar y el dia actual.
al momento de crear el procedimientos me salen estos errores:
Código de error 0, estado SQL42601: ERROR: una cadena separada por $ está inconclusa en o cerca de «$BODY$
DECLARE
customer ALIAS FOR $1»
Línea 1, columna 1
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «sql_query»
Línea 6, columna 2
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «start_day»
Línea 7, columna 2
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «days_to_use»
Línea 8, columna 2
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «dates»
Línea 9, columna 2
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «diferenre»
Línea 10, columna 2
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «query_result»
Línea 11, columna 2
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «sql_query»
Línea 12, columna 1
Código de error 0, estado SQL26000: ERROR: no existe la sentencia preparada «sql_query»
Línea 18, columna 2
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «start_day»
Línea 20, columna 2
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «days_to_us»
Línea 21, columna 2
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «INTO»
Línea 23, columna 2
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «IF»
Línea 25, columna 2
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «sql_query»
Línea 27, columna 3
Código de error 0, estado SQL26000: ERROR: no existe la sentencia preparada «sql_query»
Línea 28, columna 3
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «dates»
Línea 29, columna 3
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «sql_query»
Línea 31, columna 3
Código de error 0, estado SQL26000: ERROR: no existe la sentencia preparada «sql_query»
Línea 32, columna 3
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «dates»
Línea 33, columna 3
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «ELSE»
Línea 34, columna 2
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «sql_query»
Línea 36, columna 3
Código de error 0, estado SQL26000: ERROR: no existe la sentencia preparada «sql_query»
Línea 37, columna 3
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «dates»
Línea 38, columna 3
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «sql_query»
Línea 40, columna 3
Código de error 0, estado SQL26000: ERROR: no existe la sentencia preparada «sql_query»
Línea 41, columna 3
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «dates»
Línea 42, columna 3
Código de error 0, estado SQL42601: ERROR: error de sintaxis en o cerca de «IF»
Línea 43, columna 2
Código de error 0, estado SQL42703: ERROR: no existe la columna «return»
Línea 45, columna 2
Código de error 0, estado SQL42601: ERROR: una cadena separada por $ está inconclusa en o cerca de «$BODY$ LANGUAGE 'plpgsql' VOLATILE»
Línea 49, columna 1
Código de error 0, estado SQL42883: ERROR: no existe la función p_get(integer)
Línea 51, columna 1