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

PL/SQL错误PLS-00103-预期yyyy时遇到符号xxxx,sql,oracle,plsql,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; BE

我知道这些错误通常是由打字错误引起的;至少我一直在寻找。如果我的问题是打字错误,我看了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:     ( 

谢谢您的帮助。

您对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;
/