我有任务:
您必须定义一个集合类型来保存行的属性项目。然后创建一个表格来保存发票数据,包括有关其订单项的信息。不要为以下内容定义单独的表项目。只需包括在中引用的任何项目的属性直接在订单项本身内的订单项。您需要创建使用下面显示的订单项数据生成三张发票。
-------- --------- --------------- ------- ---------------------------- -------- --------- ----------
INV001 27-APR-18 CREDIT A000100 GREEN WIDGET 1 35.10 35.10
A000200 BLUE WIDGET 3 35.10 105.30
INV002 27-APR-18 Due on Receipt A001000 WHITE WIDGET 5 35.10 175.50
A000800 ORANGE THREE-HANDLED WIDGET 8 45.99 367.92
A000200 BLUE WIDGET 6 35.10 210.60
A000700 YELLOW THREE-HANDLED WIDGET 2 43.25 86.50
A000400 ORANGE WIDGET 1 45.99 45.99
INV003 27-APR-18 Due on Receipt
显示发票的行项目:
SELECT LI.*
FROM INVOICE I, TABLE(I.LINEITEMS) LI;
我创建了表并用数据填充它们-https://dbfiddle.uk/?rdbms=oracle_18&fiddle=cacb503443bb162e03648370b3c53efd
但是我必须提出的要求不起作用。我在做什么错?
这是我在ruSO上从大家那里得到的答案的翻译(如果有任何翻译错误,我深表歉意。)>
嵌套表应为表declared as a column中的Invoice
。表LineItems
将按照条款STORE AS
中的说明自动创建。你去了:
create or replace type LineItemT as object ( ItemId varchar (50), Quantity int, Description varchar (50) , UnitPrice decimal (10,5) , LineTotal decimal (10,5) ) / create or replace type LineItemsТ as table of LineItemТ / create table Invoice ( Invoice# varchar (50) not null, shipdate date, terms VARCHAR(50), LineItems LineItemsT ) nested table LineItems store as LineItems /
填写数据,查询将起作用:
insert into Invoice values ( 'INV001', date'27-04-18', 'CREDIT', LineItemsT (LineItemT ('A000100', 1, 'GREEN WIDGET', 35.10, 35.10), LineItemT ('A000200', 6, 'BLUE WIDGET', 35.10, 210.60))); select Invoice# invNo, li.* from invoice i, table (i.lineitems) li; INVNO ITEMID QUANTITY DESCRIPTION UNITPRICE LINETOTAL ---------- ---------- ---------- ---------------- ---------- ---------- INV001 A000100 1 GREEN WIDGET 35,1 35,1 INV001 A000200 6 BLUE WIDGET 35,1 210,6
在db<>fiddle上。