我是对象关系型数据库的新手,目前从教科书上自学。
在Oracle中创建用户定义类型时,用UDT对象的表,是否可以使用过程、游标、触发器等,还是这些功能只能在关系数据库中使用?
我花了时间在网上搜索,自己也想找到这个答案,但是我现在已经看了很多关于这个话题的文章,让我很困惑,所以我想在这里可以简单的回答一下(希望)。
在Oracle中创建用户定义类型时,使用UDT对象的表,是否可以使用过程、游标、触发器等。
可以。
还是这些功能只有在关系型数据库中才能使用?
是的.还是这些功能只能在关系型数据库中使用?
CREATE TYPE person IS OBJECT(
id NUMBER,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
mother REF PERSON,
MEMBER FUNCTION full_name( self IN PERSON )
RETURN VARCHAR2,
MEMBER FUNCTION children (self IN PERSON )
RETURN SYS_REFCURSOR
);
CREATE TABLE people OF person (
ID PRIMARY KEY
);
CREATE TYPE BODY person IS
MEMBER FUNCTION full_name( self IN PERSON )
RETURN VARCHAR2
IS
BEGIN
RETURN self.first_name || ' ' || self.last_name;
END;
MEMBER FUNCTION children( self IN PERSON )
RETURN SYS_REFCURSOR
IS
p_cursor SYS_REFCURSOR;
BEGIN
OPEN p_cursor FOR
SELECT VALUE(p) AS child
FROM people p
WHERE p.mother.id = self.id;
RETURN p_cursor;
END;
END;
/
CREATE SEQUENCE people__id__seq;
CREATE TRIGGER people__new__trg
BEFORE INSERT ON people
FOR EACH ROW
WHEN (new.ID IS NULL)
BEGIN
:new.ID := PEOPLE__ID__SEQ.NEXTVAL;
END;
/
INSERT INTO people ( first_name, last_name )
SELECT 'Alice', 'Abbot' FROM DUAL UNION ALL
SELECT 'Belle', 'Burns' FROM DUAL UNION ALL
SELECT 'Carol', 'Charles' FROM DUAL;
UPDATE people
SET mother = ( SELECT REF(p) FROM people p WHERE id=2 )
WHERE id = 3;
那么,请问
SELECT id,
first_name,
last_name,
p.mother.id
FROM people p;
输出:
ID