Tôi cần lấy tham chiếu về: new.OBJECT_VALUE nhưng bây giờ tôi không làm cách nào.Oracle: nhận tài liệu tham khảo trong PLSQL
Tôi đã thử làm điều này.
Tuyên bố của các loại:
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 của bảng:
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;
/
Tuyên bố của cò:
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;
Nếu ai đó muốn thử với dữ liệu:
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);
nhưng tôi nhận được lỗi sau:
ORA-01747: invalid user.table.column, table.column, or columns specification
bất cứ ai có thể giúp tôi?
là bên trong một kích hoạt và tôi triying để có được những tài liệu tham khảo của các objet để chèn nó trong một bảng lồng nhau. –
@Ben Ông muốn có được con trỏ logic đến đối tượng hàng. Xem http://docs.oracle.com/cd/B28359_01/appdev.111/b28371/adobjint.htm#i458258 – Toru
Chính xác, cảm ơn bạn @Toru. –