Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use a variable into "in" clause postgres

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
like image 646
Nycolas Merino Avatar asked Sep 17 '25 14:09

Nycolas Merino


1 Answers

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];

Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!