CREATE TYPE BODY 用于定义或实现由 CREATE TYPE 所创建的类型规范中的成员方法。
对于没有在 call_spec
的类型规范中指定的方法,必须在类型主体中指定相应的方法主体。
前提条件
在 ADT 的 CREATE TYPE 中,每个成员声明必须在 CREATE TYPE 或 CREATE TYPE BODY 定义中具有相应的构造。
要在 Schema 中创建或替换类型主体,您必须具有 CREATE TYPE 或 CREATE ANY TYPE 的系统权限。要在其他用户的 Schema 中创建类型,您必须具有 CREATE ANY TYPE 的系统权限。要替换另一个用户的 Schema 中的类型,您必须具有 DROP ANY TYPE 的系统权限。
语法
说明
本章节只包含部分重点语法节点的格式。
create_type_body_stmt
格式如下:plsql_type_body_source
格式如下:plsql_type_body_decl_list_semicolon
格式如下:plsql_type_body_decl_list
格式如下:proc_or_func_def_in_type
格式如下:
语义
语法 | 关键字或语法节点 | 说明 |
---|---|---|
create_type_body_stmt | OR REPLACE | 重新创建该类型主体(如果存在),然后重新编译。 在重新定义类型主体之前被授予权限的用户仍然可以访问该类型主体,而无需重新获得权限。 您可以使用此子句将成员子程序定义添加到 |
plsql_type_body_source | pl_schema_name | 包含类型主体的 Schema 名称。默认值为您的 Schema。 |
TYPE | ADT 的名称。 | |
subprog_decl_in_type | subprog_decl_in_type | 与类型规范关联的功能或存储过程的类型。 您必须在类型规范中为每个存储过程或函数定义一个对应的方法名称和可选参数列表。对于函数,还必须指定一个返回类型。 |
proc_or_func_def_in_type | proc_or_func_def_in_type | 存储过程或函数定义。 |
示例
obclient>CREATE TYPE demo_typ2 AS OBJECT (
a1 NUMBER,
MEMBER FUNCTION get_square RETURN NUMBER
);
/
obclient>CREATE OR REPLACE TYPE BODY demo_typ2 IS
MEMBER FUNCTION get_square RETURN NUMBER IS
BEGIN
RETURN a1;
END;
END;
/