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