2009/2/20 Newton Michel de Oliveira <[email protected]>: > Pessoal, > estou tentando fazer um particionamento de tabelas por mes e ano, mas > não estou conseguindo utilizar a variavel declarada na clausula from. Na > realidade a variavel S_TABELA seria o nome da tabela e a variavel S_INDICE o > nome do indice. > > CREATE OR REPLACE FUNCTION log_historico() > RETURNS trigger AS $$ > > DECLARE > S_TABELA CHAR(30) := "log_"+(EXTRACT(MONTH FROM NEW.data) + EXTRACT(year > FROM NEW.data)); > S_INDICE CHAR(30) := "idx_log_"+(EXTRACT(MONTH FROM NEW.data) + > EXTRACT(year FROM NEW.data));
Até onde eu me lembro o operador "+" é o operador aritmético soma. Me parece que o que você deseja é uma concatenação de strings e aí, pelo que me lembro, o operador é ||. Veja: http://www.postgresql.org/docs/current/interactive/functions-math.html http://www.postgresql.org/docs/current/interactive/functions-string.html > BEGIN > > IF TG_OP = 'INSERT' THEN > BEGIN > INSERT INTO S_TABELA > VALUES (NEW.data, > NEW.codigo_empresa, > NEW.codigo_loja,NEW.nsu, > NEW.dtef_origem, > NEW.codigo_pdv, > NEW.codigo_rede, > NEW.status, > NEW.status_offline, > NEW.codigo_transacao, > NEW.nsu_rede, > NEW.cupom, > NEW.codigo_resposta, > NEW.data_hora, > NEW.valor, > NEW.numero_cartao, > NEW.dados, > NEW.descricao, > NEW.emissor, > NEW.detalhe1, > NEW.detalhe2, > NEW.log_consolidado, > NEW.app_origem > ); > EXCEPTION > WHEN UNDEFINED_TABLE THEN > CREATE TABLE S_TABELA (CHECK ( EXTRACT(MONTH FROM data) = > EXTRACT(MONTH FROM NEW.data) and EXTRACT(year FROM data) = EXTRACT(MONTH > FROM NEW.data) )) INHERITS (log); > CREATE INDEX S_INDICE ON S_TABELA (data); > PERFORM log_historico(); Creio que você deva dar uma lida no manual: http://www.postgresql.org/docs/current/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN > END; > END IF; > > IF TG_OP = 'UPDATE' THEN > UPDATE S_TABELA > SET codigo_pdv = NEW.codigo_pdv, > codigo_rede = NEW.codigo_rede, > status = NEW.status, > status_offline = NEW.status_offline, > codigo_transacao = NEW.codigo_transacao, > nsu_rede = NEW.nsu_rede, > cupom = NEW.cupom, > codigo_resposta = NEW.codigo_resposta, > data_hora = NEW.data_hora, > valor = NEW.valor, > numero_cartao = NEW.numero_cartao, > dados = NEW.dados, > descricao = NEW.descricao, > emissor = NEW.emissor, > detalhe1 = NEW.detalhe1, > detalhe2 = NEW.detalhe2, > log_consolidado = NEW.log_consolidado, > app_origem = NEW.app_origem > > WHERE data = NEW.data AND > codigo_empresa = NEW.codigo_empresa AND > codigo_loja = NEW.codigo_loja AND > nsu = NEW.nsu AND > dtef_origem = NEW.dtef_origem; > END IF; > > RETURN NEW; > END; > $$ LANGUAGE plpgsql > Como hojé já é Carnaval pode ser que eu tenha me enganado. Osvaldo _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
