PL / SQL错误PLS-00103 - 期待yyyy时遇到符号xxxx

时间:2014-09-10 04:36:43

标签: sql oracle plsql

我知道这些错误通常是由错别字引起的;这就是我至少找到的东西。如果我的问题是拼写错误,看了大约30分钟后我看不到它,这让我发疯了。

我的问题是:我做了一些根本错误的事情,还是你看到了错字?

PL / SQL:

CREATE OR REPLACE PROCEDURE Replenish_Stock(p_id  VARCHAR2, n  INT)
AS
  no_such_id EXCEPTION;
  CURSOR pc IS
    SELECT Product_ID FROM Products;

BEGIN
  IF p_id IN pc THEN
    UPDATE Products
    SET Stock_Level = Stock_Level + n
    WHERE product_id = p_id;
  ELSE
    RAISE no_such_id;
  END IF;

  EXCEPTION
    WHEN INVALID_NUMBER THEN
      DBMS_OUTPUT.PUT_LINE('Bad integer input, ignoring procedure call.');
    WHEN no_such_id THEN
      DBMS_OUTPUT.PUT_LINE('Bad Product id, ignoring procedure call.');
END;
/

错误代码:

Error(7,14): PLS-00103: Encountered the symbol "PC" when expecting one of the following:     ( 

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您对IN和CURSOR的使用是不对的。以下应该适合你。您可以使用SQL%ROWCOUNT查看更新查询是否会影响表中的任何行。

CREATE OR REPLACE PROCEDURE Replenish_Stock(p_id  VARCHAR2, n  INT)
AS
   no_such_id EXCEPTION;
   Rows_Updated NUMBER;

BEGIN

    UPDATE Products
    SET Stock_Level = Stock_Level + n
    WHERE product_id = p_id;


  IF( SQL%ROWCOUNT = 0) THEN
    RAISE no_such_id;
  END IF;

  EXCEPTION
    WHEN INVALID_NUMBER THEN
      DBMS_OUTPUT.PUT_LINE('Bad integer input, ignoring procedure call.');
    WHEN no_such_id THEN
      DBMS_OUTPUT.PUT_LINE('Bad Product id, ignoring procedure call.');
END;
/