Caro "biozit",

Eu fiz da seguinte forma, vou usar um exemplos simples aqui porque não tenho
mais acesso ao problema real, e também não sei se é a melhor forma de se
fazer isso mas comigo funcionou.

Eu tenho duas tabelas (enfatizo novamente que é um exemplo hipotético no
exemplos real os campos a serem tratado eram campos data e não varchar como
aqui): 
teste1(id serial NOT NULL,
  nome varchar(40),
  data date,
  numero int2 DEFAULT 0,
  total int2)

teste2(id serial NOT NULL,
  nome varchar(40))

Foi necessário criar uma VIEW que unisse os dois campos nomes das duas
tabelas que ficou assim:

CREATE OR REPLACE VIEW vw_teste AS 
 SELECT teste.nome AS um, teste2.nome AS dois
   FROM teste, teste2;

Até aqui tudo bem só que o programador queria atualizar através da VIEW só
que toda atualização sem a RULE gerava a seguinte mensagem.

ERROR:  cannot update a view
HINT:  You need an unconditional ON UPDATE DO INSTEAD rule.

Assim depois de muito quebrar a cabeça crier uma RULE para a VIEW da
seguinte forma

create rule rl_teste1 AS ON UPDATE TO vw_teste
do instead update teste2 set nome=NEW.dois where nome=OLD.dois

O que essa rule faz:

update vw_teste set dois='paolo' where dois='fellipo'

Ele sabe que toda vez que eu atualizar o campo dois da VIEW este é referente
ao campo nome da tabela teste2 e faz a atulização direto na tabela. Para
criar a rule de UPDATE para o campo UM basta alterar a RULE de dois para um.

É claro que isso que criei aqui é um exemplo longe da realidade mas dá para
visualizar o raciocínio que usei. Não sei se é o mais adequado mas na época
ajudou bastante. A lógica para insert e delete é a mesma.

No manual em PDF que peguei no sourceforge as páginas referentes ao assunto
são: 549 até 554 capítulo 33.

Espero ter ajudado.

Abraços

Paolo Bordoni


-----Mensagem original-----
De: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Em nome de biozit
Enviada em: terça-feira, 12 de dezembro de 2006 08:33
Para: Grupo de Usuários do PostgreSQL no Brasil
Assunto: Re: [PostgreSQL-Brasil] RES: update em view

marcos...como foi essa rule que vc criou..como é logica disso ? achei 
bem legal!

Paolo Bordoni Caldeira escreveu:
> Caro Marcos,
>
> Uma vez eu também estava com o mesmo problema que o seu não conseguia nem
> usar o UPDATE como tb o DELETE isso acontecia no meu justa pelo faot que o
> BIOZIT disse o postgre não sabia qual tabela executar então depois de
muito
> quebrar a cabeça descobri que teria como fazer criando uma RULE (regra) se
> possível dá uma lida no capítulo de RULES do manual do Postgres eu não sei
> qual é o link porque eu uso a ersão em PDF mas lá tem exemplos que poderão
> te ajudar.
>
> Abraços
>
> Paolo
>
> -----Mensagem original-----
> De: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Em nome de biozit
> Enviada em: segunda-feira, 11 de dezembro de 2006 10:54
> Para: Grupo de Usuários do PostgreSQL no Brasil
> Assunto: Re: [PostgreSQL-Brasil] update em view
>
> dar update em view nun é muito aconselhavel....pois as vezes o SGBD nun 
> sabe de qual tabela e da onde é em views mais complexas.....
>
>
> Osvaldo Rosario Kussama escreveu:
>   
>> Marcos Fabrício Corso escreveu:
>>   
>>     
>>> nao estou conseguindo criar uma view com o seguinte comando
>>>  
>>> update cliente set numero '123' where numero = '' ;
>>>  
>>> me o pgadmin me retorna que a sntaxe update esta incorreta
>>>  
>>> o que pode ser ...
>>>  
>>>     
>>>       
>> View com um comando UPDATE ?!?!
>>
>> Veja a definição de view em:
>> http://www.postgresql.org/docs/8.1/interactive/sql-createview.html
>>
>> CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW name [ ( column_name [, 
>> ...] ) ]  AS query
>>
>> onde:
>> query
>>      A query (that is, a SELECT statement) which will provide the 
>> columns and rows of the view.
>>
>>
>> []s
>> Osvaldo
>>
>>
>>              
>> _______________________________________________________ 
>> Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu
celular.
>>     
> Registre seu aparelho agora! 
>   
>> http://br.mobile.yahoo.com/mailalertas/ 
>>  
>>
>> _______________________________________________
>> Grupo de Usuários do PostgreSQL no Brasil
>> Antes de perguntar consulte o manual
>> http://pgdocptbr.sourceforge.net/
>>
>> Para editar suas opções ou sair da lista acesse a página da lista em:
>> http://pgfoundry.org/mailman/listinfo/brasil-usuarios
>>
>>   
>>     
>
>
>   


-- 
Fabio "biozit" Andrijauskas
EU SEI VOAR!!

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a