2016-07-22 40 views
1

我正在學習PL/SQL,並且我創建了此過程,它編譯;我沒有足夠的經驗與PL/SQL到那個地方我錯在哪裏:PL/SQL:行未插入

只是要清楚,我的問題是,「我做了什麼錯?」

我使用Datagrip和端口轉發到OracleVM;我懷疑那裏有問題,因爲我之前插入了行,但這不起作用。

CREATE OR REPLACE PROCEDURE basket_add_sp 
    (
    p_basketid IN bb_basketitem.idbasket%TYPE, 
    p_prodid IN bb_basketitem.idproduct%TYPE, 
    p_qty IN bb_basketitem.quantity%TYPE, 
    p_price IN bb_basketitem.price%TYPE, 
    p_size IN bb_basketitem.option1%TYPE, 
    p_form IN bb_basketitem.option2%TYPE 
) 
    IS 
    BEGIN 
    INSERT INTO BB_BASKETITEM(idbasketitem, idproduct, quantity, price, idbasket, option1, option2) 
    VALUES (bb_idBasketitem_seq.NEXTVAL, p_prodid, p_qty, p_price, p_basketid, p_size, p_form); 
    COMMIT; 
END; 

其中完成。

[2016-07-21 21:18:28] completed in 18ms 

我運行的程序:

BEGIN 
    basket_add_sp(14,8,1,10.80,2,4); 
END; 

而且完成。

[2016-07-21 21:18:39] completed in 14ms 

但是,當我檢查表來驗證,沒有行返回。

SELECT * FROM BB_BASKETITEM WHERE IDBASKETITEM = 14; 

返回此:

enter image description here

然而,當我檢查表,還有其他行有。

SELECT * FROM BB_BASKETITEM WHERE IDBASKETITEM = 20; 

返回此:

enter image description here

回答

2
SELECT * FROM BB_BASKETITEM WHERE IDPRODUCT = 8; 

IDBASKETITEM是一個唯一的ID,甲骨文產生的序列當你插入。

+0

這確實顯示所有'IDPRODUCT'是8,但爲什麼不顯示'IDBASKETITEM' 14?我沒有插入一個新的行作爲PK,不是嗎?爲什麼沒有工作?對不起,我只是很困惑,爲什麼我沒有與IDBASKETITEM 14行。 – NonCreature0714

+1

是的,你在'p_basketid'作爲參數傳遞給函數..但在INSERT語句中的第一個值不使用'p_basketid' ..而是它使用一個值,它從Oracle序列'得到bb_idBasketitem_seq.NEXTVAL ' –

+0

哦,好吧,我現在看到它,不敢相信我錯過了它 - 謝謝! – NonCreature0714