gpt4 book ai didi

oracle - 创建涉及继承的嵌套表时出错

转载 作者:行者123 更新时间:2023-12-02 02:23:57 27 4
gpt4 key购买 nike

我的结构有点复杂,如下:

create or replace type user_typ as object(
user_id number(19,0),
username nvarchar2(40 char)
);

我继承了一个applicant_typ:

create or replace type applicant_typ under user_typ (
resume_text nclob
);

我的设计涉及申请人可以申请的工作。为此,我创建了一个 application_typ,如下所示:

create or replace TYPE Application_typ AS OBJECT (
application_id NUMBER,
candidate applicant_typ,
time_of_app DATE
);

CREATE TYPE Application_tab IS TABLE OF Application_typ;

现在我想创建一个名为 Job_typ 的对象类型,以及一个包含这些对象的表,其中将有一个用于应用程序的嵌套表:

CREATE OR REPLACE TYPE Job_typ AS OBJECT (
job_ID NUMBER,
company_ID NUMBER,
description NVARCHAR2(1000),
name NVARCHAR2(200),
application Application_tab,
MAP MEMBER FUNCTION job_no RETURN NUMBER,
MEMBER PROCEDURE no_of_applicants
);

所有这些都运行良好。问题是当我尝试创建 Job_typ 类型的表时:

CREATE TABLE Job_tab OF Job_typ 
NESTED TABLE application STORE AS application_nt;

这不起作用,给出错误:

SQL Error: ORA-02320: failure in creating storage table for nested table column APPLICATION
ORA-22913: must specify table name for nested table column or attribute
02320. 00000 - "failure in creating storage table for nested table column %s"
*Cause: An error occurred while creating the storage table for the
specified nested table column.

我做错了什么?

编辑:我尝试了一些不同的事情。如果我按如下方式更改 application_typ :

CREATE OR REPLACE TYPE Application_typ AS OBJECT (
application_id NUMBER,
candidate User_Typ, -- NOTE: This attribute is now of type User_typ instead of the inherited type
time_of_app DATE,
);

CREATE TYPE Application_tab IS TABLE OF Application_typ;

然后一切正常,我就可以创建作业表了。为什么使用继承类型时会出现错误?

最佳答案

我在 Oracle 11.2.0.1 中尝试了以下操作,没有收到任何错误。不过我做了一些小小的改变:

CREATE OR REPLACE TYPE user_typ AS OBJECT
(
user_id NUMBER (19, 0),
username NVARCHAR2 (40 CHAR)
) NOT FINAL; -- << Notice the NOT FINAL keyword

create or replace type applicant_typ under user_typ (
resume_text nclob
);

CREATE OR REPLACE TYPE Application_typ AS OBJECT
(
application_id NUMBER,
candidate applicant_typ,
time_of_app DATE
);

CREATE TYPE Application_tab IS TABLE OF Application_typ;

CREATE OR REPLACE TYPE Job_typ AS OBJECT
(
job_ID NUMBER,
company_ID NUMBER,
description NVARCHAR2 (1000),
name NVARCHAR2 (200),
application Application_tab,
MAP MEMBER FUNCTION job_no
RETURN NUMBER,
MEMBER PROCEDURE no_of_applicants
);

CREATE TABLE Job_tab OF Job_typ
NESTED TABLE application
STORE AS application_nt;

在尝试创建所有类型和关键字时,我收到错误:

[Error] PLS-00590 (10.1): PLS-00590: attempting to create a subtype UNDER a FINAL type

这是因为 Oracle 不允许在 FINAL 类型上创建子类型。如果您没有为基类型定义任何终结子句,则默认为 FINAL

了解更多关于 Oracle Docs .

<小时/>

如果您正在为现实世界(阅读行业)编码,我建议不要使用嵌套表作为列类型。你最终会花费一生的时间试图嵌套和取消嵌套这些。我建议您尽可能地或需要地标准化您的架构,并为 PL/SQL 代码块中的操作保留嵌套表。

关于oracle - 创建涉及继承的嵌套表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27139800/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com