类型表上的DML¶
insert语句¶
使用类型创建的表除了支持普通表上的insert语句,还支持插入类型的对象。
语法:
insert_type_obj ::=
values_clause ::=
说明:
tbl_name为类型创建的表的名字
type_obj为类型的对象
示例:
CREATE OR REPLACE TYPE tp_insert IS OBJECT(att1 INT, att2 INT);
/
CREATE TABLE tbl_tp_insert OF tp_insert;
INSERT INTO tbl_tp_insert VALUES(tp_insert(1, 2));
SELECT * FROM tbl_tp_insert;
ATT1(int) |ATT2(int) |
------------------------------
1 |2 |
总数目:1
CREATE OR REPLACE FUNCTION func_tp_insert RETURN tp_insert
IS
BEGIN
RETURN tp_insert(1, 3);
END;
/
INSERT INTO tbl_tp_insert VALUES(func_tp_insert);
SELECT * FROM tbl_tp_insert;
ATT1(int) |ATT2(int) |
------------------------------
1 |2 |
------------------------------
1 |3 |
总数目:2
INSERT INTO tbl_tp_insert SELECT value(a) FROM tbl_tp_insert a;
SELECT * FROM tbl_tp_insert;
ATT1(int) |ATT2(int) |
------------------------------
1 |2 |
------------------------------
1 |3 |
------------------------------
1 |2 |
------------------------------
1 |3 |
总数目:4
delete语句¶
使用类型创建的表支持普通表上的delete语句,并且where子句支持使用对象作为比较条件
示例:
CREATE OR REPLACE TYPE tp_delete IS OBJECT(att1 INT, att2 INT);
/
CREATE TABLE tbl_tp_delete OF tp_delete;
INSERT INTO tbl_tp_delete VALUES(tp_delete(1, 2));
INSERT INTO tbl_tp_delete VALUES(tp_delete(2, 2));
INSERT INTO tbl_tp_delete VALUES(tp_delete(3, 2));
DELETE tbl_tp_delete a WHERE value(a) = tp_delete(2, 2);
SELECT * FROM tbl_tp_delete;
ATT1(int) |ATT2(int) |
------------------------------
1 |2 |
------------------------------
3 |2 |
总数目:2
DELETE tbl_tp_delete;
SELECT * FROM tbl_tp_delete;
ATT1(int) |ATT2(int) |
总数目:0
select语句¶
使用类型创建的表支持普通表上的select语句,并且提供了value函数把表的一行转换为一个对象,其中value函数的参数为表的别名。支持返回值为类型对象的函数通过'.'引用对象的变量或成员函数
示例:
CREATE OR REPLACE TYPE tp_select IS OBJECT(att1 INT, att2 INT, MEMBER FUNCTION func RETURN INT);
/
CREATE OR REPLACE TYPE BODY tp_select IS
MEMBER FUNCTION func RETURN INT
IS
BEGIN
RETURN att1 + att2;
END;
END;
/
CREATE TABLE tbl_tp_select OF tp_select;
INSERT INTO tbl_tp_select VALUES(tp_select(1, 2));
INSERT INTO tbl_tp_select VALUES(tp_select(2, 2));
INSERT INTO tbl_tp_select VALUES(tp_select(3, 2));
SELECT value(a) FROM tbl_tp_select a;
?COLUMN?(TP_SELECT) |
-------------------------
TP_SELECT(1, 2) |
-------------------------
TP_SELECT(2, 2) |
-------------------------
TP_SELECT(3, 2) |
总数目:3
SELECT value(a).att1 att1, value(a).att2 att2, value(a).func() sum FROM tbl_tp_select a;
ATT1(int) |ATT2(int) |SUM(int) |
--------------------------------------------
1 |2 |3 |
--------------------------------------------
2 |2 |4 |
--------------------------------------------
3 |2 |5 |
总数目:3
SELECT value(a).func() FROM tbl_tp_select a WHERE value(a) = tp_select(2,2);
?COLUMN?(int) |
-------------------
4 |
总数目:1