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

Responder a