Pessoal,

Postei uma dúvida em uma outra lista sobre Insert e
Update em views que foge às regras de views
atualizáveis.

Pesquisando um pouco mais sobre o assunto, na net,
encontrei esse material, abaixo.

De repente pode ser útila para alguém dessa lista.

[]´s

Luis Alberto.


VIEWS atualizáveis


Uma VIEW é atualizável se todas as seguintes condições
forem satisfeitas :





Ela é baseada nos dados de uma única tabela ou de uma
outra VIEW atualizável 


As colunas excluídas pela definição da VIEW (presentes
nas tabelas originais) aceitem valores NULOS. 


O comando select da VIEW não tenha subqueries, não
utilize DISTINCT, HAVING, funções agregadas, JOINs,
UDFs ou Stored Procedures. 


Se qualquer uma das condições àcima falhar, então a
VIEW será ReadOnly. Note que apesar disso, voce pode
simular que uma VIEW read-only seja atualizável
através do uso de triggers que serão responsáveis pela
manipulação dos dados nas tabelas originais. É da
responsabilidade do programador a
distribuição/manipulação dos dados em suas respectivas
tabelas através dos triggers.



Exemplo de utilização de triggers para simular uma
VIEW atualizável (retirado da documentação do IB):



/* Criando as tabelas bases */

CREATE TABLE Table1 (

ColA INTEGER NOT NULL,

ColB VARCHAR(20),

CONSTRAINT pk_table PRIMARY KEY(ColA)

);

CREATE TABLE Table2 (

ColA INTEGER NOT NULL,

ColC VARCHAR(20),

CONSTRAINT fk_table2 FOREIGN KEY REFERENCES
Table1(ColA)

);

/* Criando a VIEW */

CREATE VIEW TableView AS

SELECT Table1.ColA, Table1.ColB, Table2.ColC

FROM Table1, Table2

WHERE Table1.ColA = Table2.ColA;

/* Trigger para gerenciar os deletes */

CREATE TRIGGER TableView_Delete FOR TableView BEFORE
DELETE AS

BEGIN

DELETE FROM Table1

WHERE ColA = OLD.ColA;

DELETE FROM Table2

WHERE ColA = OLD.ColA;

END;



/* Trigger para gerenciar os Updates */

CREATE TRIGGER TableView_Update FOR TableView BEFORE
UPDATE AS

BEGIN

UPDATE Table1 SET ColB = NEW.ColB

WHERE ColA = OLD.ColA;

UPDATE Table2 SET ColC = NEW.ColC

WHERE ColA = OLD.ColA;

END;

/* Trigger para gerenciar os Inserts */

CREATE TRIGGER TableView_Insert FOR TableView BEFORE
INSERT AS

BEGIN

INSERT INTO Table1 values (NEW.ColA,NEW.ColB);

INSERT INTO Table2 values (NEW.ColA,NEW.ColC);

END;




  

Autor : Carlos Henrique Cantu
Matéria publicada na revista Clube Delphi



        



        
                
_______________________________________________________ 
Promoção Yahoo! Acesso Grátis: a cada hora navegada você acumula cupons e 
concorre a mais de 500 prêmios! Participe! http://yahoo.fbiz.com.br/


-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 




Responder a