DO $$
DECLARE
rec RECORD;
outcome BOOLEAN;
rule TEXT;
BEGIN
-- Assume the record references a single row that contains the columns under test in the rule
rule := 'columnA > 30 OR columnB < 50';
END;
$$
LANGUAGE plpgsql;
Aqui está um bloco conciso com um exemplo da regra que gostaria de avaliar em relação ao registro. Imagino que precise de EXECUTE
uma instrução SQL dinâmica.
Quero determinar o tipo do registro dinamicamente em tempo de execução, pois tenho acesso fácil a outra string com o nome da tabela. Eu imaginei lançar para table_name%ROWTYPE
. Pelo que entendi, não consigo converter dinamicamente um RECORD para um tipo composto em tempo de execução.
Pensei então em usar row_to_json(rec)
, mas precisaria avaliar a regra em relação a esse objeto JSON. Não estou familiarizado com como fazer isso em PL/pgSQL.
Estou buscando de um CURSOR para um RECORD porque quero um iterador que possa passar para diferentes funções que não tenha a sobrecarga de uma TEMPORARY TABLE. Sou bastante novo em PL/pgSQL, diria apenas alguns milhares de LOC na linguagem, então ainda estou aprendendo como trabalhar com suas estruturas de controle. Estou pensando que talvez precise fazer backup um pouco e escolher diferentes controles e/ou estruturas de dados para o problema. Como você abordaria esse problema?