2017-07-05 1 views
0

J'ai créé un déclencheur après mise à jour et souhaite ajouter des données provenant de deux tables différentes (GORADID et SPRIDEN) lorsque la mise à jour se déclenche. Les deux tables sont connectées par une colonne (PIDM), donc est-il possible de collecter aussi des données de la table 2? Jusqu'à présent, je recevais des erreurs telles que ORA: pas de variables de liaison .. J'ai également essayé de faire une déclaration de sélection. Mais aussi pas de chance. Toutes les suggestions aideraient.Mettre à jour le déclencheur pour ajouter des données de deux tables différentes sur la table d'audit

error: psl-00049: bad bind variable ':new.spriden_id' 
error: psl-00049: bad bind variable ':new.spriden_first_name' 
error: psl-00049: bad bind variable ':new.spriden_last_name' 
+1

Pouvez-vous poster l'erreur réelle que vous recevez et structure de la table des GORADID – XING

+0

@XING - Les problèmes ne sont pas avec GORADID. C'est la 2ème table (SPRIDEN), où j'essaie de sélectionner des données. Veuillez noter que je peux insérer des données de GORADID avec succès. –

+0

Veuillez ajouter une structure pour la table 'SPRIDEN' et' SZRGORA_AUDIT'. –

Répondre

1

Votre déclencheur appartient à GORADID table et: nouvelle: vieux représentent ce tableau

pouvez-vous essayer de changer votre déclencheur comme celui-ci?

CREATE OR REPLACE TRIGGER GORADID_UPDT_TRG1 
    AFTER UPDATE OF GORADID_ADDITIONAL_ID 
    ON GORADID 
    FOR EACH ROW 
DECLARE 
    SZRGORA_AUDIT_USER_BANNER_ID VARCHAR2 (150 CHAR); 
    SZRGORA_AUDIT_STUDENT_BANNER VARCHAR2 (9 CHAR); 
    SZRGORA_AUDIT_USER_FIRST_NAME VARCHAR2 (150 CHAR); 
    SZRGORA_AUDIT_USER_LAST_NAME VARCHAR2 (150 CHAR); 
    SZRGORA_AUDIT_ADDITIONAL_ID  VARCHAR2 (50 CHAR); 
    SPRIDEN_ID      VARCHAR2 (9 CHAR); 
BEGIN 
    SELECT USER INTO SZRGORA_AUDIT_USER_BANNER_ID FROM DUAL; 

    SELECT SPRIDEN_ID 
    INTO SZRGORA_AUDIT_STUDENT_BANNER 
    FROM SPRIDEN 
    WHERE  SPRIDEN_PIDM =:old.GORADID_PIDM; 


    SELECT SPRIDEN_FIRST_NAME, SPRIDEN_LAST_NAME 
    INTO SZRGORA_AUDIT_USER_FIRST_NAME, SZRGORA_AUDIT_USER_LAST_NAME 
    FROM SATURN.SPRIDEN 
    WHERE SPRIDEN_PIDM = (SELECT PIDM 
          FROM SATURN.IDM_STAFF_AFF_ST 
          WHERE USERNAME = USER); 

    INSERT INTO SZRGORA_AUDIT 
     VALUES (SZRGORA_AUDIT_STUDENT_BANNER, 
       :new.GORADID_ADDITIONAL_ID, 
       :old.GORADID_ADDITIONAL_ID, 
       SZRGORA_AUDIT_USER_FIRST_NAME, 
       SZRGORA_AUDIT_USER_LAST_NAME, 
       USER, 
       'UPDATE', 
       SYSDATE, 
       :new.GORADID_SURROGATE_ID, 
       :new.GORADID_VERSION, 
       :new.GORADID_VPDI_CODE); 
END; 
1

Essayez le code ci-dessous pour votre déclencheur. Veuillez noter que vous pouvez utiliser :new et :old uniquement pour les colonnes de la table GORADID lorsque vous écrivez le déclencheur ON GORADID.
Vous sélectionnez USER INTO SZRGORA_AUDIT_USER_BANNER_ID. Donc, vous devriez utiliser SZRGORA_AUDIT_USER_BANNER_ID dans vos prochaines requêtes au lieu de dire USER. Dire directement USERNAME = USER ne fonctionnera pas je pense.

CREATE OR REPLACE TRIGGER AUDIT_USER.GORADID_UPDT_TRG1 
AFTER UPDATE OF GORADID_ADDITIONAL_ID 
ON GORADID 
FOR EACH ROW 
    DECLARE 
    v_SZRGORA_AUDIT_USER_BANNER_ID VARCHAR2(150 CHAR); 
    v_SZRGORA_AUDIT_STUDENT_BANNER VARCHAR2(9 CHAR); 
    v_SZRGORA_AUDIT_USER_FIRST_NAME VARCHAR2(150 CHAR); 
    v_SZRGORA_AUDIT_USER_LAST_NAME VARCHAR2(150 CHAR); 
    BEGIN 
    SELECT USER INTO v_SZRGORA_AUDIT_USER_BANNER_ID FROM DUAL; 

    SELECT SPRIDEN_ID 
    INTO v_SZRGORA_AUDIT_STUDENT_BANNER 
    FROM SATURN.SPRIDEN 
    WHERE SPRIDEN_PIDM = :new.GORADID_PIDM 
     AND GORADID_ADDITIONAL_ID = :new.GORADID_ADDITIONAL_ID; 

    SELECT SPRIDEN_FIRST_NAME, SPRIDEN_LAST_NAME 
    INTO v_SZRGORA_AUDIT_USER_FIRST_NAME, v_SZRGORA_AUDIT_USER_LAST_NAME 
    FROM SATURN.SPRIDEN 
    WHERE SPRIDEN_PIDM = 
    (SELECT PIDM FROM SATURN.IDM_STAFF_AFF_ST 
     WHERE USERNAME = v_SZRGORA_AUDIT_USER_BANNER_ID); 

    INSERT INTO AUDIT_USER.SZRGORA_AUDIT VALUES 
    (v_SZRGORA_AUDIT_STUDENT_BANNER, 
    :new.GORADID_ADDITIONAL_ID, 
    :old.GORADID_ADDITIONAL_ID, 
    v_SZRGORA_AUDIT_USER_FIRST_NAME, 
    v_SZRGORA_AUDIT_USER_LAST_NAME, 
    v_SZRGORA_AUDIT_USER_BANNER_ID, 
    'UPDATE', 
    SYSDATE, 
    :new.GORADID_SURROGATE_ID, 
    :new.GORADID_VERSION, 
    :new.GORADID_VPDI_CODE); 
    END; 
/
+0

Je continue à obtenir ces [Erreur] ORA-00942 (15: 27): PL/SQL: ORA-00942: table ou vue n'existe pas –

+0

[Erreur] ORA-00904 (26: 11): PL/SQL: ORA-00904: "GORADID_ADDITIONAL_ID": identificateur invalide –

+0

@ A.Rahman: J'ai mis à jour ma réponse. Essayez à nouveau avec. –