PLpgSQL — вызов запроса с использованием переменной

#database #function #plpgsql

Вопрос:

Я новичок в написании процедур на SQL. Я пытаюсь написать функцию, которая сначала выбирает условие для строк, которые не будут удалены, а затем удаляет каждую строку, которая не соответствует моим критериям. Вот соответствующая часть функции:

 CREATE OR REPLACE FUNCTION anom.anonimiza_itens_notas()

RETURNS integer
LANGUAGE 'plpgsql'

AS $BODY$
DECLARE

rItemNota RECORD;
contador INTEGER;
dataDelecao DATE;
competenciaDelecao VARCHAR;

BEGIN
contador := 0;

SELECT INTO dataDelecao CURRENT_DATE;
competenciaDelecao = anom.cria_competencia(dataDelecao);

DELETE FROM itens_notas WHERE cp_producao NOT IN ( competenciaDelecao );

foo...
bar...
END;
amp;BODYamp;;
 
 

ОК. До сих пор я хотел создать переменную под названием «competenciaDelecao», которая возвращает это:

( ‘202103’ , ‘202102’ , ‘202101’ , ‘202012’ , ‘202011’ , ‘202010’ )

Затем сделайте запрос на удаление всех остальных строк, в которых столбец «cp_producao» не содержит ни одного из выбранных выше переменных. Мой последний запрос должен выглядеть так:

 DELETE FROM itens_notas WHERE cp_producao NOT IN ( '202103' , '202102' , '202101' , '202012' , '202011' , '202010' );
 

Но мой код фактически удалил каждую строку из itens_notas

Мой вопрос: как я могу написать запрос, который использует переменную в функции?

Комментарии:

1. Ты можешь измениться anom.cria_competencia() ? Если да, то лучше всего было бы изменить его, чтобы возвращать набор, а не строку, и использовать непосредственно в запросе ... NOT IN (SELECT nmuloc FROM anom.cria_competencia(dataDelecao)) .