【发布时间】:2013-05-09 12:09:55
【问题描述】:
我可以在将值插入表中得到一些帮助。该表称为 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 错误:ORA-00933:SQL 命令未正确结束
上面的第二个插入语句产生以下错误:
SQL 错误:ORA-00936:缺少表达式
我可以帮我成功地将值插入 LineItemList_ntab 嵌套表吗?
更新
我有这个代码来插入数据:
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 错误:ORA-22979:无法插入对象视图 REF 或用户定义的 REF 22979. 00000 - “无法插入对象视图 REF 或用户定义的 REF” *原因:试图将对象视图 REF 或用户定义的 REF 插入 为存储系统生成的 REF 值而创建的 REF 列" *操作:确保要插入的 REF 不是来自对象视图 或来自用户定义的 REF 列
我很确定这个错误是因为我可能错误地创建了表,这是我的 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
/
更新2
此代码成功将信息添加到表中:
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/
我确定该错误与上表的 OBJECT IDENTIFIER IS PRIMARY KEY 有关。
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
)
【问题讨论】:
标签: oracle reference insert nested-table object-relational-model