加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle:在PLSQL中获取引用

发布时间:2020-12-12 16:29:46 所属栏目:百科 来源:网络整理
导读:我需要获得引用:new.OBJECT_VALUE但我现在不怎么做. 我试过这样做. 类型声明: CREATE TYPE Virus_ObjType AS OBJECT ( name VARCHAR2(50),description VARCHAR2(700));/CREATE TYPE Paper_ObjType AS OBJECT ( id NUMBER,title VARCHAR(100),magazine VARC
我需要获得引用:new.OBJECT_VALUE但我现在不怎么做.

我试过这样做.

类型声明:

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;
/

表格声明:

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;
/

触发声明:

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;

如果有人想尝试使用数据:

INSERT INTO paper_objtable (id,title,magazine,vol,num,year) VALUES (1,'Que mala es la Gripe','Fuzzy Sets',1,1993);
INSERT INTO paper_objtable (id,year) VALUES (3,'La Gripe ataca de nuevo','Information Sciences',1996);
INSERT INTO virus_objtable
    (SELECT 'Gripe','Virus de la Gripe',CAST(COLLECT(REF(a)) AS Paper_NestTabType)
     FROM paper_objtable a);

但我得到了下一个错误:

ORA-01747: invalid user.table.column,table.column,or columns specification

谁能帮我?

试试 MAKE_REF:
SELECT MAKE_REF(virus_objtable,:new.object_id) INTO virus FROM dual;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读