我正在尝试创建一个oracle-object类型的oracle表.
这是我的对象结构的样子
CREATE OR REPLACE TYPE PERS_T AS OBJECT
(
empno number(4)
, ename varchar2(10)
, job varchar2(9)
, hiredate DATE
, sal number(7,2)
, comm number(7,2)
, deptno number(2)
)NOT FINAL;
CREATE OR REPLACE TYPE EMP_T FORCE UNDER pers_t (
mgr pers_t
);
Run Code Online (Sandbox Code Playgroud)
所有这些都很好,但当我尝试使用时创建一个EMP_T类型表
CREATE TABLE table_name(emp_type EMP_T);
Run Code Online (Sandbox Code Playgroud)
我收到了错误
SQL Error: ORA-30756: cannot create column or table of type that contains a supertype attribute
Run Code Online (Sandbox Code Playgroud)
在oracle中可以创建这样的表吗?
我不这么认为。根据Oracle自己的支持数据库,以下适用于ora-30756
ORA-30756 消息文件中的错误文本、原因和操作
版本 9.2、10.1、10.2、11.1、11.2、12.1
错误:ORA-30756 无法创建包含超类型属性的类型的列或表
原因:用户尝试创建包含超类型属性的对象类型的列或表。这是不支持的,因为它会导致我们当前的存储模型中的无限递归。请注意,创建类型的列意味着我们也创建与所有子类型属性相对应的列。操作:更改类型定义以包含超类型 REF 属性而不是超类型对象属性。
您已经创建了一个超级类型 PERS_T 所以我相信这是您的问题。正如文章所述,您可以创建引用属性而不是对象属性作为解决方法,如 @tbone 所解释的 - CREATE TABLE table_name(emp_type REF EMP_T);
| 归档时间: |
|
| 查看次数: |
713 次 |
| 最近记录: |