Problemas de View e Trigger

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
pc_delphi
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 128
Registrado em: Qui, 29 Mai 2008 6:44 pm
Localização: São Paulo
Tudo posso, nAquel que me fortalece
Filipenses 4:13

Senhores, tenho uma view que leva o valor de ROWID com alias RID. Essa view chama uma trigger de Insert, sempre que eu for dar um Insert via Aplicativo(Escrito em Delphi). Acontece que sempre que eu vou inserir um novo registro, diz que o campo RID de ter um valor. Eu não posso retirar esse campo(ROWID) da view, que é por ele que eu faço o DELETE e o UPDATE(mais duas triggers). Companheiros, como eu faço então para solucionar esse problema, sempre que eu inserir um novo registro? Quando for um novo, é chamada a VIEW e não a tabela. Abaixo os códigos da VIEW e da TRIGGER.

Selecionar tudo

CREATE OR REPLACE VIEW TRAFOS_UF AS
SELECT  NUMID, TAP_PRI, TAP_SEC, TAP_TER, CAR_PS, CAR_ST, CAR_PT,MVA_V2_ST, 
        MVA_V2_PT, INSTALACAO, EQUIPAMENTO, FASES, MVA_NOM_PS, MVA_NOM_ST, 
        MVA_NOM_PT, MVA_V1_PS, MVA_V1_ST, MVA_V1_PT, MVA_V2_PS, CENTER_TAP, ROWID RID,
        'N' VERSIONED
FROM TRAFOS_UF_LT T;

Selecionar tudo

CREATE OR REPLACE TRIGGER "SGD_INSERT_TRAFOS_UF" INSTEAD OF INSERT ON TRAFOS_UF 
DECLARE
  VOLD         TRAFOS_UF%ROWTYPE;
  VNEW         TRAFOS_UF%ROWTYPE;
  PROCESS      INTEGER;
BEGIN
  PROCESS := SGD$ADM.GETPROCESS_TRIGGER;
VOLD.NUMID := :OLD.NUMID; 
VOLD.TAP_PRI := :OLD.TAP_PRI; 
VOLD.TAP_SEC := :OLD.TAP_SEC; 
VOLD.TAP_TER := :OLD.TAP_TER; 
VOLD.CAR_PS := :OLD.CAR_PS; 
VOLD.CAR_ST := :OLD.CAR_ST; 
VOLD.CAR_PT := :OLD.CAR_PT; 
VOLD.MVA_V2_ST := :OLD.MVA_V2_ST; 
VOLD.MVA_V2_PT := :OLD.MVA_V2_PT; 
VOLD.INSTALACAO := :OLD.INSTALACAO; 
VOLD.EQUIPAMENTO := :OLD.EQUIPAMENTO; 
VOLD.FASES := :OLD.FASES; 
VOLD.MVA_NOM_PS := :OLD.MVA_NOM_PS; 
VOLD.MVA_NOM_ST := :OLD.MVA_NOM_ST; 
VOLD.MVA_NOM_PT := :OLD.MVA_NOM_PT; 
VOLD.MVA_V1_PS := :OLD.MVA_V1_PS; 
VOLD.MVA_V1_ST := :OLD.MVA_V1_ST; 
VOLD.MVA_V1_PT := :OLD.MVA_V1_PT; 
VOLD.MVA_V2_PS := :OLD.MVA_V2_PS; 
VOLD.CENTER_TAP := :OLD.CENTER_TAP;
VNEW.NUMID := NVL(:NEW.NUMID,0 ); 
VNEW.TAP_PRI := :NEW.TAP_PRI; 
VNEW.TAP_SEC := :NEW.TAP_SEC; 
VNEW.TAP_TER := :NEW.TAP_TER; 
VNEW.CAR_PS := :NEW.CAR_PS; 
VNEW.CAR_ST := :NEW.CAR_ST; 
VNEW.CAR_PT := :NEW.CAR_PT; 
VNEW.MVA_V2_ST := :NEW.MVA_V2_ST; 
VNEW.MVA_V2_PT := :NEW.MVA_V2_PT; 
VNEW.INSTALACAO := :NEW.INSTALACAO; 
VNEW.EQUIPAMENTO := :NEW.EQUIPAMENTO; 
VNEW.FASES := :NEW.FASES; 
VNEW.MVA_NOM_PS := :NEW.MVA_NOM_PS; 
VNEW.MVA_NOM_ST := :NEW.MVA_NOM_ST; 
VNEW.MVA_NOM_PT := :NEW.MVA_NOM_PT; 
VNEW.MVA_V1_PS := :NEW.MVA_V1_PS; 
VNEW.MVA_V1_ST := :NEW.MVA_V1_ST; 
VNEW.MVA_V1_PT := :NEW.MVA_V1_PT; 
VNEW.MVA_V2_PS := :NEW.MVA_V2_PS;
VNEW.CENTER_TAP := NVL(:NEW.CENTER_TAP,0
);
  IF (PROCESS = 0)  THEN
    /** DISPARAR DISPATCH  (BIR)**/ 
    PCK_TRG_TRAFOS_UF.BIR(VOLD,VNEW);
  END IF;
    INSERT INTO TRAFOS_UF_LT (NUMID, TAP_PRI, TAP_SEC, TAP_TER, CAR_PS, CAR_ST, CAR_PT, MVA_V2_ST, MVA_V2_PT, INSTALACAO, EQUIPAMENTO, FASES, MVA_NOM_PS, MVA_NOM_ST, MVA_NOM_PT, MVA_V1_PS, MVA_V1_ST, MVA_V1_PT, MVA_V2_PS, CENTER_TAP)
    VALUES (VNEW.NUMID, VNEW.TAP_PRI, VNEW.TAP_SEC, VNEW.TAP_TER, VNEW.CAR_PS, VNEW.CAR_ST, VNEW.CAR_PT, VNEW.MVA_V2_ST, VNEW.MVA_V2_PT, VNEW.INSTALACAO, VNEW.EQUIPAMENTO, VNEW.FASES, VNEW.MVA_NOM_PS, VNEW.MVA_NOM_ST, VNEW.MVA_NOM_PT, VNEW.MVA_V1_PS, VNEW.MVA_V1_ST, VNEW.MVA_V1_PT, VNEW.MVA_V2_PS, VNEW.CENTER_TAP);
    IF (PROCESS = 0) THEN
      /** DISPARAR DISPATCH  (AIR)**/ 
      PCK_TRG_TRAFOS_UF.AIR(VOLD,VNEW);
    END IF;
END;
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5026
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

No forms existe uma opção onde se marca qual campo será atualizado. Então, basta dizer que o campo RID será "Query only".

Infelizmente, não sei em delphi se existe algo parecido.
Mas você não pode inserir direto na TABELA ? (no lugar da view ) ?
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Tem certeza que esse erro não é da sua interface no Delphi? Ou ele traz um erro de banco de dados? (ORA-NNNNN)

Se for erro de banco de dados, manda para nós qual é, que vai ajudar bastante.
pc_delphi
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 128
Registrado em: Qui, 29 Mai 2008 6:44 pm
Localização: São Paulo
Tudo posso, nAquel que me fortalece
Filipenses 4:13

Estou achando que seja da minha interface, mas tenho a mesma rodando em outro banco e que funciona. Eu comparar bancoa banco e vê se há algo diferente. Qualquer coisa eu posto aqui.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante