oracle - ORA-02315: 默认构造函数的参数数量不正确
问题描述
我有这张表,我正试图开始工作,但每当我尝试插入它时都会出错,我不明白我为什么会得到它。任何帮助将不胜感激!
CREATE TYPE item AS OBJECT
(itemID NUMBER(6),
description CLOB) NOT FINAL;
/
CREATE TYPE producers_t AS OBJECT
(producerID NUMBER(3),
producer VARCHAR(35));
/
CREATE TYPE producers_type AS TABLE OF REF producers_t;
/
CREATE TYPE dvds_typ UNDER item
(ISBN NUMBER(13),
subject VARCHAR(35),
title VARCHAR(150),
producers producers_type);
/
CREATE TABLE dvds_tab OF dvds_typ (PRIMARY KEY (itemID)
) NESTED TABLE producers STORE AS producers_ntab;
/
INSERT INTO dvds_tab
VALUES (95, 'A dvd about...', '1324567891234', 'Sci-Fi', 'A long dvd',
producers_t(producers_type(56, 'Gary')));
解决方案
您创建producers_type
asTABLE OF REF producers_t
但您没有传入REF
值,而是传入了基础对象。如果要存储非REF
值,则将类型创建为:
CREATE TYPE producers_type AS TABLE OF producers_t;
/
(正如@AlexPoole在您的插入语句中指出的那样交换producers_t(producers_type(56, 'Gary'))
到。)producers_type(producers_t(56, 'Gary'))
例如:
CREATE TYPE item AS OBJECT(
itemID NUMBER(6),
description CLOB
) NOT FINAL;
CREATE TYPE producers_t AS OBJECT(
producerID NUMBER(3),
producer VARCHAR(35)
);
CREATE TYPE producers_type AS TABLE OF producers_t;
CREATE TYPE dvds_typ UNDER item(
ISBN NUMBER(13),
subject VARCHAR(35),
title VARCHAR(150),
producers producers_type
);
CREATE TABLE dvds_tab OF dvds_typ (
PRIMARY KEY ( itemID )
) NESTED TABLE producers STORE AS producers_ntab;
INSERT INTO dvds_tab
VALUES (
95,
'A dvd about...',
'1324567891234',
'Sci-Fi',
'A long dvd',
producers_type(producers_t(56, 'Gary'))
);
db<>在这里摆弄
由于您使用的是对象表,另一种选择是只创建一个表item
:
CREATE TABLE items OF item (
PRIMARY KEY ( itemID )
);
INSERT INTO items
VALUES (
dvds_typ(
95,
'A dvd about...',
'1324567891234',
'Sci-Fi',
'A long dvd',
producers_type(producers_t(56, 'Gary'))
)
);
然后,要获取数据,您可以使用:
SELECT i.itemid,
i.description,
i.isbn,
i.subject,
i.title,
p.producerid,
p.producer
FROM (
SELECT i.itemId,
i.description,
TREAT(VALUE(i) AS dvds_typ).isbn AS isbn,
TREAT(VALUE(i) AS dvds_typ).subject AS subject,
TREAT(VALUE(i) AS dvds_typ).title AS title,
TREAT(VALUE(i) AS dvds_typ).producers AS producers
FROM items i
) i
OUTER APPLY TABLE( i.producers ) p
哪个输出:
项目 | 说明 | 国际标准书号 | 主题 | 标题 | 生产者 ID | 制片人 -----: | :------------- | ------------: | :-------- | :--------- | ---------: | :-------- 95 | 一个关于...的DVD | 1324567891234 | 科幻 | 很长的DVD | 56 | 加里
db<>在这里摆弄
推荐阅读
- php - 在hangman的php函数中将字符隐藏为下划线
- sql - 如何在一个事实表中添加多个外部列
- r - 在 grDevices::png(..., res = dpi, units = "in") 中:加载 cairo DLL 失败
- angular - Angular Reactive Form - 订阅表单数组中的表单控件实例以获得总值
- ajax - vue-good-table 从你的数据中选择某一行来显示
- python - Matplotlib-Cartopy Streamplot 导致 QhullError 有一些预测
- html - +/- 计数器组件可以写成 html 表单吗?
- ios - NSManagedObjectContextObjectsDidChange 通知仅在之前访问过修改的托管对象时发送。为什么?
- ibm-cloud-infrastructure - 如何确定活动 VM 具有 vGPU?
- jquery - 物化导航栏下拉菜单不起作用