0

請問我可以幫助您將值插入表中。該表稱爲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 
) 

回答

1

您應該使用類型構造在選擇子查詢,填補了嵌套表中的場合:

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 
) 
+0

謝謝你的代碼。你可以看看我的OP更新。 – user2381256

+0

查看我更新的帖子,我強烈建議你擺脫所有這些對象,並使用普通表格。並且僅從前端級別的數據創建對象,而不是在數據庫中創建對象,這不是目的。 – ZZa

+0

您的代碼生成此錯誤:SQL錯誤:ORA-00904:「STCKITEM」:無效的標識符。我的更新修復了這個問題,但引用錯誤發生。另外,我需要使用從對象創建的表格。這是在我的簡報中這樣做。 – user2381256