目的
使用 CREATE TYPE 语句创建对象类型、SQLJ 对象类型、命名可变数组 (varray)、嵌套表类型或不完整对象类型的规范。您可以使用 CREATE TYPE 和 CREATE TYPE BODY 语句创建对象类型。 CREATE TYPE 语句指定对象类型的名称、其属性、方法和其他属性。 CREATE TYPE BODY 语句包含实现该类型的方法的代码。
在 PL/SQL 中声明和初始化对象
对象类型可以表示任何现实世界的实体。例如,对象类型可以表示学生、银行账户、计算机屏幕、有理数或数据结构(如队列、堆栈或列表)。
目前,您无法在 PL/SQL 块、子程序或包中定义对象类型。您可以使用 SQL 语句 CREATE TYPE 在 SQL*Plus 中以交互方式定义它们。请参阅下面的示例,“定义对象类型”。
有关 CREATE TYPE SQL 语句的信息,请参阅Oracle Database SQL Reference。有关 CREATE TYPE BODY SQL 语句的信息,请参阅Oracle Database SQL Reference。
在模式中定义和安装对象类型后,您可以使用它在任何 PL/SQL 块、子程序或包中声明对象。例如,您可以使用对象类型来指定属性、列、变量、绑定变量、记录字段、表元素、形参或函数结果的数据类型。在运行时,创建对象类型的实例;也就是说,该类型的对象被实例化。每个对象可以保存不同的值。
此类对象遵循通常的范围和实例化规则。在块或子程序中,局部对象在您进入块或子程序时被实例化,而在您退出时不再存在。在包中,对象在您第一次引用包时被实例化,而在您结束数据库会话时不再存在。
```
CREATE TYPE address_typ AS OBJECT (
street VARCHAR2(30),
city VARCHAR2(20),
state CHAR(2),
postal_code VARCHAR2(6) );
/
CREATE TYPE employee_typ AS OBJECT (
employee_id NUMBER(6),
first_name VARCHAR2(20),
last_name VARCHAR2(25),
email VARCHAR2(25),
phone_number VARCHAR2(20),
hire_date DATE,
job_id VARCHAR2(10),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
manager_id NUMBER(6),
department_id NUMBER(4),
address address_typ,
MAP MEMBER FUNCTION get_idno RETURN NUMBER,
MEMBER PROCEDURE display_address ( SELF IN OUT NOCOPY employee_typ ) );
/
CREATE TYPE BODY employee_typ AS
MAP MEMBER FUNCTION get_idno RETURN NUMBER IS
BEGIN
RETURN employee_id;
END;
MEMBER PROCEDURE display_address ( SELF IN OUT NOCOPY employee_typ ) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(first_name || ' ' || last_name);
DBMS_OUTPUT.PUT_LINE(address.street);
DBMS_OUTPUT.PUT_LINE(address.city || ', ' || address.state || ' ' ||
address.postal_code);
END;
END;
/
CREATE TABLE employee_tab OF employee_typ;
```
Source