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 格式如下:

    create_type_body_stmt

  • plsql_type_body_source 格式如下:

    plsql_type_body_source

  • plsql_type_body_decl_list_semicolon 格式如下:

    3plsql_type_body_decl_list_semicolon

  • plsql_type_body_decl_list 格式如下:

    4plsql_type_body_decl_list

  • proc_or_func_def_in_type 格式如下:

    8proc_or_func_def_in_type

语义

语法

关键字或语法节点

说明

create_type_body_stmt

OR REPLACE

重新创建该类型主体(如果存在),然后重新编译。

在重新定义类型主体之前被授予权限的用户仍然可以访问该类型主体,而无需重新获得权限。

您可以使用此子句将成员子程序定义添加到 ALTER TYPE … 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

存储过程或函数定义。

示例

  1. obclient>CREATE TYPE demo_typ2 AS OBJECT (
  2. a1 NUMBER,
  3. MEMBER FUNCTION get_square RETURN NUMBER
  4. );
  5. /
  6. obclient>CREATE OR REPLACE TYPE BODY demo_typ2 IS
  7. MEMBER FUNCTION get_square RETURN NUMBER IS
  8. BEGIN
  9. RETURN a1;
  10. END;
  11. END;
  12. /