Получение ошибок при попытке вставить данные в таблицу в Oracle - PullRequest
0 голосов
/ 21 ноября 2011

Я использую Python 2.7 и модуль cx_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() из cx_Oracle Я получаю следующую ошибку:

DatabaseError: ORA-00911: invalid character

Когда я помещаю его в SQL, он говорит:

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

Я пытаюсь сделать корзину UPDATE, если у пользователя уже есть выбранная книга в корзине, и INSERT, если в корзине нет текущих копий книги, которую он хочет.

Метод execute выглядит так:

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

и каждый из параметров генерируется пользователем с использованием rawinput(), а затем проверяется на соответствие регулярному выражению.

1 Ответ

2 голосов
/ 21 ноября 2011

Вам необходимо заключить свои заявления в 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;
...