I need to create a function that has a variable, and that variable I can use in the 'where' clause, and the variable must be of the 'in' type
See the variable varGeraMovGer and the use in "where"
CREATE OR REPLACE FUNCTION public.gera_pend()
RETURNS varchar AS
$BODY$
DECLARE
varGeraMovGer varchar := ('112301','112451');
BEGIN
INSERT INTO MOVCON (MCON_TRANSACAO, MCON_OPERACAO, MCON_STATUS, MCON_DATALCTO, MCON_DATAMVTO, MCON_PCON_CONTA, MCON_UNID_CODIGO, MCON_VALOR, MCON_DC, MCON_HIST_CODIGO, MCON_COMPLEMENTO, MCON_NUMERODCTO)
SELECT SV_TRANSACAO
, SV_TRANSACAO || NEXTVAL('SV_OPERACAO')
, CAST('N' AS VARCHAR)
, SV_DATA_CONTABIL
, SV_DATA_CONTABIL
, SV_CONTA_DEBITO
, CAST('001' AS VARCHAR)
, SUM(SV_VALOR_CONTABIL)
, (CASE WHEN SV_TIPO_DEBITO = 'DEVEDORA' THEN 'D' ELSE 'C' END)
, CAST('9999' AS VARCHAR)
, SV_CLASSIFICADOR
, CAST('0606' AS VARCHAR)
FROM SV_IMPORTACAO
WHERE SV_CONTA_DEBITO IN varGeraMovCon
GROUP BY SV_TRANSACAO, SV_DATA_CONTABIL, SV_CONTA_DEBITO, SV_TIPO_DEBITO, SV_CLASSIFICADOR;
RETURN 'FIM PROCESSAMENTO';
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.gera_pend()
OWNER TO erp;
The postgres return:
ERROR: syntax error at or near "varGeraMovCon"
LINE 32: WHERE SV_CONTA_DEBITO IN varGeraMovCon
You need an array
DECLARE
vargeramovger text[] := array['112301','112451'];
begin
...
WHERE SV_CONTA_DEBITO = ANY(vargeramovger);
...
end;
Note that if SV_CONTA_DEBITO is a "number" (e.g. integer or bigint) you need to change the type of the array:
vargeramovger int[] := array[112301,112451];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With