将数据插入嵌套表
请问我可以帮助您将值插入表中。该表称为PurchaseOrder_objtab。这里是表格的类型:将数据插入嵌套表
CREATE TYPE PurchaseOrder_objtyp AUTHID CURRENT_USER AS OBJECT
(
PONo NUMBER,
CUST_ref REF Customer_objtyp,
OrderDate DATE,
ShipDate DATE,
LineItemList_ntab LineItemList_ntabtyp,
ShipToAddr_obj Address_objtyp
)
/
LineItemList_ntab是一个嵌套表。
这里是LineItemList_ntabtyp的创建代码:
CREATE TYPE LineItem_objtyp AS OBJECT (
LineItemNo NUMBER,
Stock_ref REF StockItem_objtyp,
Quantity NUMBER,
Discount NUMBER
)
/
CREATE TYPE LineItemList_ntabtyp AS TABLE of LineItem_objtyp
/
下面是一些插入代码,做工作:
INSERT INTO PurchaseOrder_objtab
SELECT 1008, REF(C),
SYSDATE, '12-MAY-1999',
LineItemList_ntabtyp(),
NULL
FROM Customer_objtab C
WHERE C.CustNo = 1;
在上面的代码中,LineItemList_ntab是一个空LineItemList_ntabtyp。我想为这个嵌套表添加值,而不是在INSERT INTO代码中为空。
下面是一些我试图插入具有值的代码:
INSERT INTO PurchaseOrder_objtab
SELECT 1008, REF(C),
SYSDATE, '12-MAY-1999',
LineItemList_ntabtyp(1, REF(StckItem), 10, 1) FROM Stock_objtab StckItem WHERE StckItem.StockNo = 1004,
NULL
FROM Customer_objtab C
WHERE C.CustNo = 1;
INSERT INTO PurchaseOrder_objtab
SELECT 1008, REF(C),
SYSDATE, '12-MAY-1999',
INSERT INTO LineItemList_ntab SELECT 1, REF(StckItem),10,1 FROM Stock_objtab StckItem WHERE StckItem.StockNo = 1004,
NULL
FROM Customer_objtab C
WHERE C.CustNo = 1;
第一插入语句的上方产生以下错误:
SQL Error: ORA-00933: SQL command not properly ended
第二插入语句的上方产生以下错误:
SQL Error: ORA-00936: missing expression
请问我可以帮助您成功inser t值到LineItemList_ntab嵌套表中?
UPDATE
我有这样的代码来插入数据:
INSERT INTO PurchaseOrder_objtab
SELECT
1008,
REF(C),
SYSDATE,
'12-MAY-1999',
(SELECT LineItemList_ntabtyp(LineItem_objtyp(1, REF(StckItem), 10, 1)) FROM Stock_objtab StckItem WHERE StckItem.StockNo = 1004),
NULL
FROM Customer_objtab C
WHERE C.CustNo = 1;
现在我收到以下错误:
SQL Error: ORA-22979: cannot INSERT object view REF or user-defined REF 22979. 00000 - "cannot INSERT object view REF or user-defined REF" *Cause: Attempt to insert an object view REF or user-defined REF in a REF column created to store system generated REF values" *Action: Make sure the REF to be inserted is not from an object view or from a user-defined REF column
我敢肯定,这个错误是因为我可能不正确地创建表,下面是我的表为PurchaseOrder_objtab创建代码:
CREATE TABLE PurchaseOrder_objtab OF PurchaseOrder_objtyp(
PRIMARY KEY (PONo),
FOREIGN KEY (Cust_ref) REFERENCES Customer_objtab)
OBJECT ID PRIMARY KEY
NESTED TABLE LineItemList_ntab STORE AS PoLine_ntab(
(PRIMARY KEY(NESTED_TABLE_ID, LineItemNo))
ORGANIZATION INDEX COMPRESS)
RETURN AS LOCATOR
/
下面是创建嵌套表的代码:
CREATE TYPE LineItemList_ntabtyp AS TABLE of LineItem_objtyp
/
UPDATE2
此代码成功地将信息添加到表:
INSERT INTO PurchaseOrder_objtab
SELECT 1009, REF(C),
SYSDATE, '10-MAY-1999',
LineItemList_ntabtyp(),
NULL
FROM Customer_objtab C
WHERE C.CustNo = 1;
所以在错误与LineItemList_ntabtyp有关。
下面是表创建代码:
CREATE TABLE PurchaseOrder_objtab OF PurchaseOrder_objtyp(
PRIMARY KEY (PONo),
FOREIGN KEY (Cust_ref) REFERENCES Customer_objtab)
OBJECT ID PRIMARY KEY
NESTED TABLE LineItemList_ntab STORE AS PoLine_ntab((PRIMARY KEY(NESTED_TABLE_ID,LineItemNo)) ORGANIZATION INDEX COMPRESS) RETURN AS LOCATOR/
我相信错误有事情做与对象标识符对上述表的主键。
UPDATE3
谢谢你的代码。如何将多个值插入到嵌套表中。
你对一个项目的代码行是:
(SELECT LineItemList_ntabtyp(LineItem_objtyp(1, REF(StckItem), 10, 1)) FROM Stock_objtab WHERE StockNo = 1004),
NULL)
怎么样,如果我想补充两个项目,这两个StockNo 1004,1005?它是这样的:
(SELECT LineItemList_ntabtyp(LineItem_objtyp(1, REF(StckItem), 10, 1)) FROM Stock_objtab WHERE StockNo = 1004) AND (SELECT LineItemList_ntabtyp(LineItem_objtyp(2, REF(StckItem), 10, 1)) FROM Stock_objtab WHERE StockNo = 1005),
NULL)
UPDATE4
如果,我添加三个项目嵌套表,做了“FROM DUAL”语句逗留“FROM DUAL”,还是将其更改为反映三个项目的东西?此外,没有了“UNION ALL”语句如下所示:
(
SELECT LineItemList_ntabtyp(
SELECT LineItem_objtyp(1, REF(StckItem), 10, 1) FROM Stock_objtab WHERE StockNo = 1004
UNION ALL
SELECT LineItem_objtyp(2, REF(StckItem), 10, 1) FROM Stock_objtab WHERE StockNo = 1005
UNION ALL
SELECT LineItem_objtyp(3, REF(StckItem), 10, 1) FROM Stock_objtab WHERE StockNo = 1006
)
FROM DUAL
)
您应该使用类型构造在选择子查询,填补了嵌套表中的场合:
INSERT INTO PurchaseOrder_objtab
SELECT
1008,
REF(C),
SYSDATE,
'12-MAY-1999',
(SELECT LineItemList_ntabtyp(LineItem_objtyp(1, REF(StckItem), 10, 1)) FROM Stock_objtab WHERE StockNo = 1004),
NULL
FROM Customer_objtab C
WHERE C.CustNo = 1;
UPDATE:
我不确定你是否正确地完成了这项任务(我的意思是把对象类型当作表格存储在我的脑海中是没用的,我会使用可管理的普通表格而不是这样的结构)
INSERT INTO PurchaseOrder_objtab
SELECT PurchaseOrder_objtyp(
1008,
REF(C),
SYSDATE,
'12-MAY-1999',
(SELECT LineItemList_ntabtyp(LineItem_objtyp(1, REF(StckItem), 10, 1)) FROM Stock_objtab WHERE StockNo = 1004),
NULL)
FROM Customer_objtab C
WHERE C.CustNo = 1;
更新2:
如果你急于插入多个值到嵌套表,使用枚举(如果该值是通过手写)或子查询:
(
SELECT LineItemList_ntabtyp(
SELECT LineItem_objtyp(1, REF(StckItem), 10, 1) FROM Stock_objtab WHERE StockNo = 1004
UNION ALL
SELECT LineItem_objtyp(2, REF(StckItem), 10, 1) FROM Stock_objtab WHERE StockNo = 1005
)
FROM DUAL
)
谢谢你的代码。你可以看看我的OP更新。 – user2381256
查看我更新的帖子,我强烈建议你摆脱所有这些对象,并使用普通表格。并且仅从前端级别的数据创建对象,而不是在数据库中创建对象,这不是目的。 – ZZa
您的代码生成此错误:SQL错误:ORA-00904:“STCKITEM”:无效的标识符。我的更新修复了这个问题,但引用错误发生。另外,我需要使用从对象创建的表格。这是在我的简报中这样做。 – user2381256