2013-01-23 1 views
2

J'essaie de créer un déclencheur qui copie un objet blob de la table B dans la ligne nouvellement créée dans la table A. Cependant, j'obtiens l'erreur ORA-22275 (locateur lob invalide spécifié) lorsque le déclencheur est supposé être exécuté. Je peux imaginer la façon dont j'accède au blob de la nouvelle rangée n'est pas la bonne manière, quelqu'un pourrait-il m'indiquer dans la bonne direction?Localisateur de lob sur une nouvelle ligne dans un déclencheur

Code de la gâchette:

CREATE OR REPLACE TRIGGER COPY_BLOB 
BEFORE INSERT ON TABLE_A 
FOR EACH ROW 
DECLARE 
    src blob; 
BEGIN 
    SELECT bytes INTO src FROM table_b WHERE id = :new.ref_id; 
    DBMS_LOB.COPY(:new.bytes, src, DBMS_LOB.GETLENGTH(src), 1, 1); 
END; 
/

Répondre

1

votre déclencheur doit être juste:

SELECT bytes 
    INTO :new.bytes 
    FROM table_b 
WHERE id = :new.ref_id; 

pas besoin d'utiliser le package DBMS_LOB du tout.

+0

Merci, votre énoncé fonctionne. Y a-t-il une différence de vitesse? L'instruction 'select' ou' DMBS COPY' est-elle plus rapide? –

+0

@Teinacher la sélection serait plus rapide (oracle copierait le lob sous les couvertures pour vous) – DazzaL

Questions connexes