Ich brauche die Referenz von: new.OBJECT_VALUE, aber ich weiß nicht, wie.Oracle: Erhalten von Referenzen in PLSQL
Ich habe versucht, dies zu tun.
Erklärung Typen:
CREATE TYPE Virus_ObjType AS OBJECT (
name VARCHAR2(50),
description VARCHAR2(700)
);
/
CREATE TYPE Paper_ObjType AS OBJECT (
id NUMBER,
title VARCHAR(100),
magazine VARCHAR2(100),
vol NUMBER,
num NUMBER,
year NUMBER(4)
);
/
CREATE TYPE Virus_NestTabType AS TABLE OF REF Virus_ObjType;
/
CREATE TYPE Paper_NestTabType AS TABLE OF REF Paper_ObjType;
/
ALTER TYPE Virus_ObjType ADD ATTRIBUTE papers Paper_NestTabType CASCADE;
/
ALTER TYPE Paper_ObjType ADD ATTRIBUTE virus Virus_NestTabType CASCADE;
/
Declatation von Tabellen:
CREATE TABLE Virus_ObjTable OF Virus_ObjType (
PRIMARY KEY(name))
NESTED TABLE papers STORE AS papersVirus_NestTable;
CREATE TABLE Paper_ObjTable OF Paper_ObjType (
PRIMARY KEY (id))
NESTED TABLE virus STORE AS virus_NestTable;
CREATE GLOBAL TEMPORARY TABLE virus_aux (
type varchar2(1),
virus REF Virus_ObjType,
paper REF Paper_ObjType)
ON COMMIT DELETE ROWS;
/
Erklärung Auslöser:
create or replace
trigger Virus_Trigger_Before BEFORE INSERT ON Virus_ObjTable
FOR EACH ROW
DECLARE
paper REF Paper_ObjType;
virus REF Virus_ObjType;
BEGIN
IF inserting THEN
IF :new.papers IS NOT NULL THEN
FOR i IN 1..:new.papers.COUNT LOOP
-- getting the pointer of the papers
SELECT refe INTO paper
FROM (SELECT REF(a) as refe FROM Paper_ObjTable a)
WHERE refe=:new.papers(i);
SELECT REF(:NEW.OBJECT_ID) INTO virus FROM dual;
INSERT INTO virus_aux VALUES ('i', virus, paper);
END LOOP;
END IF;
END IF;
END;
Wenn jemand mit Daten versuchen will:
INSERT INTO paper_objtable (id, title, magazine, vol, num, year) VALUES (1, 'Que mala es la Gripe', 'Fuzzy Sets', 1, 1, 1993);
INSERT INTO paper_objtable (id, title, magazine, vol, num, year) VALUES (3, 'La Gripe ataca de nuevo', 'Information Sciences', 1, 1, 1996);
INSERT INTO virus_objtable
(SELECT 'Gripe', 'Virus de la Gripe', CAST(COLLECT(REF(a)) AS Paper_NestTabType)
FROM paper_objtable a);
aber ich bekomme den nächsten Fehler:
ORA-01747: invalid user.table.column, table.column, or columns specification
Kann mir jemand helfen?
ist innerhalb eines Triggers und ich bin triying die Referenz zu erhalten das Objekt, um es in eine geschachtelte Tabelle einzufügen. –
@Ben Er möchte den logischen Zeiger auf das Zeilenobjekt erhalten. Siehe http://docs.oracle.com/cd/B28359_01/appdev.111/b28371/adobjint.htm#i458258 – Toru
Genau, danke @Toru. –