2011-11-21 76 views
0

我正在使用python 2.7和cx_Oracle模塊。當我嘗試運行以下查詢:從cx_Oracle我收到以下錯誤嘗試向Oracle中的表中插入數據時發生錯誤

UPDATE bs_cart 
    SET qty = qty + :moreBooks 
    WHERE userid = :userID 
    AND isbn = :bookNumber; 

IF SQL%ROWCOUNT = 0 THEN 
    INSERT INTO bs_cart 
    (userid,isbn) 
    VALUES 
    (:userID,:bookNumber) 

使用Cursor.execute()

DatabaseError: ORA-00911: invalid character 

當我把它放在SQL加上它說:

SP2-0734: unknown command beginning "IF SQL%ROW..." - rest of line ignored. 

如果用戶在購物車中已經有選定的圖書,並且如果當前沒有該圖書的副本,則試圖使購物車UPDATEINSERT嘿想要購物車。

執行方法是這樣的:

ds.execute(sql,moreBooks=howMany,userID=userLoggedIn,bookNumber=booksToBuy) 

和每個參數是用戶使用rawinput()產生,然後覈對正則表達式。

回答

2

您需要將您的語句附在begin/end Oracle塊中。

喜歡的東西:

BEGIN 
    UPDATE bs_cart 
    SET qty = qty + :moreBooks 
    WHERE userid = :userID 
    AND isbn = :bookNumber; 

    IF SQL%ROWCOUNT = 0 THEN 
    INSERT INTO bs_cart (userid,isbn) 
    VALUES (:userID,:bookNumber); 
END; 
+0

我附在'BEGIN'和'END'但現在我得到那個說'PLS-00103錯誤:出現符號「檔案結尾」期待一個時如下所示:(begin case else else if end end ... ...。它提到'END'作爲它期望的東西,爲什麼它會失敗? – mnky9800n

+1

在INSERT語句末尾需要一個分號,加上「END IF 「在結束之前 – GriffeyDog

+0

@ mnky9800n:是否有效? –

相關問題