#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))
.