更新时间:2020-03-24 09:50
类型构造器表达式(Type Constructor Expression)指定了调用构造器方法。类型构造器的参数可以是任意表达式。函数被调用的地方,类型构造器也可以被调用。
语法如下:
[ NEW ] [ schema. ]type_name
([ expr [, expr ]... ])
NEW
关键字适用于对象类型构造器,但不适用于集合类型构造器。它会引导 OceanBase 通过调用合适的构造器构建一个新的对象。NEW
关键字的使用是可选。
如果 type_name
是对象类型(Object type),则表达式必须是一个有序列表,其中有序列表的第一个参数的值类型与对象类型的第一个属性匹配,第二个参数的值类型与对象类型的第二个属性匹配,以此类推。构造器的参数总数量与对象类型的属性总数量必须匹配。
如果 type_name
是可变长数组(VARRAY
)或者嵌套表类型(Nested table type),则表达式列表可以包含 0 个或多个参数。0 参数表示创建一个空集合。否则,每个参数与类型是集合类型中元素的类型的元素值一致。
调用类型构造器方法时,尽管对象类型可以拥有超过 999 个属性值,参数的数量不能超过 999。此限制仅适用于从 SQL 中调用构造器。如果是从 PL/SQL 中调用,则需应用 PL/SQL 的限制规则。
以下示例使用了一个预先创建好的类型 cust_address_typ 展示了在调用构造器方法时表达式的使用(示例代码 3~11 行为 PL/SQL 语句):
CREATE TYPE address_book_t AS TABLE OF cust_address_typ;
DECLARE
myaddr cust_address_typ := cust_address_typ(
'500 Oracle Parkway', 94065, 'Redwood Shores', 'CA','USA');
alladdr address_book_t := address_book_t();
BEGIN
INSERT INTO customers VALUES (
666999, 'Joe', 'Smith', myaddr, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL);
END;
以下示例使用预先创建好的 warehouse_typ 类型展示了在调用构造器方法时子查询的使用:
CREATE TABLE warehouse_tab OF warehouse_typ;
INSERT INTO warehouse_tab
VALUES (warehouse_typ(101, 'new_wh', 201));
CREATE TYPE facility_typ AS OBJECT (
facility_id NUMBER,
warehouse_ref REF warehouse_typ);
CREATE TABLE buildings (b_id NUMBER, building facility_typ);
INSERT INTO buildings VALUES (10, facility_typ(102,
(SELECT REF(w) FROM warehouse_tab w
WHERE warehouse_name = 'new_wh')));
SELECT b.b_id, b.building.facility_id "FAC_ID",
DEREF(b.building.warehouse_ref) "WH"
FROM buildings b;
在文档使用中是否遇到以下问题
更多建议
匿名提交