obrigado jota.........................

a sua sujestão de código que eu vi foi plpgsql. Agora estou tentando usar a
sua sugestão de pltcl, mas quando tento instalar a linguagem estou tendo
problemas.....

não sei extamente qual é o procedimento para instalar a linguagem
pltcl..... o que eu estou fazendo é:

create language pltcl; (clico no botão PGS na janela da query) e então
recebo a msg:

[WARNING  ] create language pltcl
            ERRO:  não pôde carregar biblioteca "C:/Arquivos de
programas/PostgreSQL/8.4/lib/pltcl.dll": unknown error 126




Em 10 de novembro de 2011 14:01, JotaComm <[email protected]> escreveu:

> Olá,
>
> Em 10 de novembro de 2011 11:38, Marllos <[email protected]>escreveu:
>
> Foi mal amigo....
>> Na verdade eu quero é atribuir um valor a chave primária, mas fazendo
>> refencia dinamica a chave.
>>
>
> Então o código que enviei aqui ajuda bastante, ele não contém tudo, mas é
> o caminho das pedras :)
>
>>
>>
>> No Firebird, eu sou obrigado a ter uma função de trigger para cada tabela
>>
>>  Em 10 de novembro de 2011 08:21, JotaComm <[email protected]>escreveu:
>>
>> Olá,
>>>
>>> Em 9 de novembro de 2011 18:44, Marllos <[email protected]>escreveu:
>>>
>>>  Obrigado Volak, mas eu preciso mudar a chave primaria na funçao da
>>>> trigger
>>>>
>>>
>>> O que você considera mudar a chave primaria? Executar um ALTER TABLE na
>>> coluna que tem a chave primária? Mudar o valor do atributo da chave
>>> primária?
>>>
>>> Meu exemplo foi para dar uma idéia do que você pode fazer, não conclui o
>>> exemplo porque de fato não consegui entender o que de fato você deseja.
>>>
>>>>
>>>> Em 9 de novembro de 2011 11:52, Wolak <[email protected]>escreveu:
>>>>
>>>>  Em 09/11/2011 11:17, Marllos escreveu:
>>>>>
>>>>> Obrigado JotaComm
>>>>>
>>>>> No firebird, eu tenho que fazer uma trigger para cada tabela. No
>>>>> Postgresql eu percebi (se não estou enganado) que eu posso usar a mesma
>>>>> função de trigger em várias tabelas e é isso que estou tentando fazer.
>>>>>
>>>>> a minha função de trigger seria
>>>>>
>>>>> create or replace function *gerar_id()* returns trigger as $$
>>>>> begin
>>>>>   --essa trigger define a chave primária
>>>>>   --as tabelas que vão disparar essa trigger são tabela1, tabela2,
>>>>> tabela3, ... (muitas)
>>>>>   --essas tabelas já existem e cada uma tem uma chave primária, do
>>>>> mesmo tipo, mas com nomes diferentes
>>>>>
>>>>> new.(nome da chave primária da tabela que está disparando essa
>>>>> trigger) = uuid_generate_v4()
>>>>>
>>>>> end
>>>>> $$ language plpgsql;
>>>>>
>>>>> Agora eu quero usar essa trigger em várias tabelas:
>>>>>
>>>>> create tigger tabela1_tg before insert on tabela1
>>>>> for each row execute *gerar_id()*;
>>>>>
>>>>>  create tigger tabela2_tg before insert on tabela2
>>>>> for each row execute *gerar_id()*;
>>>>>
>>>>>  create tigger tabela3_tg before insert on tabela3
>>>>> for each row execute *gerar_id()*;
>>>>>
>>>>> Etc...
>>>>>
>>>>> Em 9 de novembro de 2011 10:17, JotaComm <[email protected]>escreveu:
>>>>>
>>>>>> Olá, Marllos
>>>>>>
>>>>>> Em 9 de novembro de 2011 10:15, Daniel Cristian Cruz <
>>>>>> [email protected]> escreveu:
>>>>>>
>>>>>>  Acredito que uma forma seja usando PL/Python:
>>>>>>>
>>>>>>>
>>>>>>> http://www.postgresql.org/docs/9.1/interactive/plpython-trigger.html
>>>>>>>
>>>>>>>  Já procurei como fazer com PL/pgSQL, mas não encontrei como
>>>>>>> referenciar dinamicamente o nome do atributo de chave primária.
>>>>>>>
>>>>>>>  Você precisará consultar o catálogo, através da pg_attribute
>>>>>>> (attname) e da pg_constraint (contype='p').
>>>>>>>
>>>>>>> Em 9 de novembro de 2011 10:02, Marllos 
>>>>>>> <[email protected]>escreveu:
>>>>>>>
>>>>>>>>  Por favor, preciso de ajuda para revolver um problema. E se for
>>>>>>>> possível gostaria de um exemplo.
>>>>>>>>
>>>>>>>> Em uma trigger, eu quero alterar a chave primária da tabela que
>>>>>>>> dispara essa trigger, mas de forma dinâmica, por exemplo:
>>>>>>>>
>>>>>>>> new.(referencia dinâmica a chave primária da tebela) = valor.
>>>>>>>>
>>>>>>>
>>>>>> Não entendi o que você deseja. Poderia colocar um exemplo prático da
>>>>>> situação.
>>>>>>
>>>>>>>
>>>>>>>> Obrigado.
>>>>>>>>
>>>>>>>> Marllos.
>>>>>>>>  _______________________________________________
>>>>>>>> pgbr-geral mailing list
>>>>>>>> [email protected]
>>>>>>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>  --
>>>>>>> Daniel Cristian Cruz
>>>>>>> クルズ クリスチアン ダニエル
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> pgbr-geral mailing list
>>>>>>> [email protected]
>>>>>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> Abraços
>>>>>> --
>>>>>> JotaComm
>>>>>> http://jotacomm.wordpress.com
>>>>>>
>>>>>> _______________________________________________
>>>>>> pgbr-geral mailing list
>>>>>> [email protected]
>>>>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> pgbr-geral mailing 
>>>>> [email protected]https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> __________ Information from ESET NOD32 Antivirus, version of virus 
>>>>> signature database 6615 (20111109) __________
>>>>>
>>>>> The message was checked by ESET NOD32 Antivirus.
>>>>> http://www.eset.com
>>>>>
>>>>>
>>>>> eu fiz isso de outra maneira, veja se é isso que precisa, isso é um
>>>>> exemplo que fiz para um colega que usava Firebird.
>>>>>
>>>>> --postgresql.conf
>>>>> --custom_variable_classes = 'sistema'        # list of custom variable
>>>>> class names
>>>>> --sistema.fkempresa = 0
>>>>> --sistema.fkfilial = 0
>>>>> --SELECT SET_CONFIG('sistema.fkempresa', '1', FALSE); -- FALSE para
>>>>> sessão atual, TRUE para transação atual
>>>>> --SELECT SET_CONFIG('sistema.fkfilial', '2', FALSE);
>>>>>
>>>>> CREATE OR REPLACE FUNCTION codigonovo(pnometabela VARCHAR,ptipo
>>>>> VARCHAR)
>>>>> RETURNS VARCHAR AS
>>>>> $$
>>>>> DECLARE
>>>>>     nFkempresa INTEGER;
>>>>>     nFkfilial  INTEGER;
>>>>>    rRetorno   RECORD;
>>>>> BEGIN
>>>>>     SELECT INTO nFkempresa CURRENT_SETTING('sistema.fkempresa');
>>>>>     SELECT INTO nFkfilial CURRENT_SETTING('sistema.fkfilial');
>>>>>     IF COALESCE(nFkempresa,0) = 0 THEN
>>>>>         RAISE EXCEPTION 'Empresa não setada para a sessão corrente!';
>>>>>     END IF;
>>>>>     IF COALESCE(nFkfilial,0) = 0 THEN
>>>>>         RAISE EXCEPTION 'Filial não setada para a sessão corrente!';
>>>>>     END IF;
>>>>>     IF LOWER(pTipo) = 'empresa' THEN
>>>>>         RETURN nFkempresa;
>>>>>     END IF;
>>>>>     IF LOWER(pTipo) = 'filial' THEN
>>>>>         RETURN nFkfilial;
>>>>>     END IF;
>>>>>    FOR rRetorno IN EXECUTE 'SELECT COALESCE(MAX(sequencia),0) + 1 AS
>>>>> sequencia
>>>>>                             FROM '||pnometabela||'
>>>>>                             WHERE fkempresa = '||nFkempresa||'
>>>>>                             AND fkfilial = '||nFkfilial
>>>>>    LOOP
>>>>>        IF LOWER(pTipo) = 'sequencia' THEN
>>>>>            RETURN rRetorno.sequencia;
>>>>>        ELSE
>>>>>            RETURN nFkempresa||'.'||nFkfilial||'.'||rRetorno.sequencia;
>>>>>        END IF;
>>>>>    END LOOP;
>>>>> END;
>>>>> $$
>>>>> LANGUAGE plpgsql;
>>>>>
>>>>> CREATE TABLE cadastro
>>>>> (
>>>>>   fkempresa integer DEFAULT codigonovo('cadastro'::character
>>>>> varying,'empresa'::character varying)::INTEGER,
>>>>>   fkfilial integer DEFAULT codigonovo('cadastro'::character
>>>>> varying,'filial'::character varying)::INTEGER,
>>>>>   sequencia integer DEFAULT codigonovo('cadastro'::character
>>>>> varying,'sequencia'::character varying)::INTEGER,
>>>>>   codigo character varying DEFAULT codigonovo('cadastro'::character
>>>>> varying,'codigo'::character varying),
>>>>>   descricao character varying(100)
>>>>> )
>>>>> WITH (
>>>>>   OIDS=FALSE
>>>>> );
>>>>> ALTER TABLE cadastro OWNER TO postgres;
>>>>>
>>>>> SELECT SET_CONFIG('sistema.fkempresa', '1', FALSE); -- FALSE para
>>>>> sessão atual, TRUE para transação atual
>>>>> SELECT SET_CONFIG('sistema.fkfilial', '2', FALSE);
>>>>> INSERT INTO cadastro (descricao) VALUES ('teste');
>>>>> SELECT * FROM cadastro ORDER BY sequencia DESC;
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> pgbr-geral mailing list
>>>>> [email protected]
>>>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> pgbr-geral mailing list
>>>> [email protected]
>>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>>
>>>>
>>>
>>> Abraços
>>> --
>>> JotaComm
>>> http://jotacomm.wordpress.com
>>>
>>> _______________________________________________
>>> pgbr-geral mailing list
>>> [email protected]
>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>
>>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> Abraços
> --
> JotaComm
> http://jotacomm.wordpress.com
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a