PLS-00103:在期待以下之一时遇到符号“&”:%符号“%被插入在“&”之前继续[关闭]

Posted

技术标签:

【中文标题】PLS-00103:在期待以下之一时遇到符号“&”:%符号“%被插入在“&”之前继续[关闭]【英文标题】:PLS-00103: Encountered the symbol "&" when expecting one of the following: % The symbol "% was inserted before "&" to continue [closed] 【发布时间】:2021-05-21 19:09:33 【问题描述】:
DECLARE

invalid_product EXCEPTION;

BEGIN 

UPDATE product

SET name = '&product_description'

WHERE productid = 12;

IF SQL&NOTFOUND THEN

RAISE invalid_product;

END IF;

COMMIT;

EXCEPTION 

 WHEN invalid_product THEN

 DBMS_OUTPUT.PUT_LINE('invalid product number.');

END;
DECLARE

  c_id customer.id%type:= -8;

  c_name customer.Name%type;

  c_addr customer.address%type;

  invalid_id EXCEPTION;

BEGIN

 IF c_id <0 THEN

  RAISE invalid_id;

  ELSE

  SELECT name,address INTO c_name,c_addr

  FROM customer

  WHERE id = c_id;

  DBMS_OUTPUT.PUT_LINE('name' || c_name);

  DBMS_OUTPUT.PUT_LINE('addresS:' || c_addr);

  END IF;

EXCEPTION

  WHEN invalid_id THEN

   DBMS_OUTPUT.PUT_LINE('invalid customer id!');

  WHEN no_data_found THEN

   DBMS_OUTPUT.PUT_LINE('no such customer');

  WHEN OTHERS THEN

   DBMS_OUTPUT.PUT_LINE('ERROR');

END;   

问题:PLS-00201:必须声明标识符“CUSTOMER.ID”。

【问题讨论】:

这是什么 - 你有两个不相关的问题,你把它们都塞在这里了吗?对于第二个错误 - CUSTOMER 表是否存在?它是否有 ID 列(而不是,例如,CUSTOMER_ID)? 是的,你在第二个问题中是对的,客户表不兴奋,谢谢我发现了错误 【参考方案1】:

是的

SQL%NOTFOUND

不是

SQL&NOTFOUND

您评论说它不起作用;这是给我的。看看:

SQL> select * from product;

 PRODUCTID NAME
---------- --------------------
        13 some name

SQL> declare
  2    invalid_product exception;
  3  begin
  4    update product
  5      set name = '&product_description'
  6      where productid = 12;
  7
  8    if sql%notfound then
  9       raise invalid_product;
 10    end if;
 11
 12    commit;
 13  exception
 14    when invalid_product then
 15      dbms_output.put_line('invalid product number.');
 16  end;
 17  /
Enter value for product_description:
invalid product number.                     --> here's your message

PL/SQL procedure successfully completed.

SQL>

【讨论】:

再次感谢这些未成年人的错误❤ 声明无效产品例外;开始更新产品集名称 = '%product_description' WHERE productid = 12; IF SQL%NOTFOUND THEN RAISE invalid_product;万一;犯罪; EXCEPTION WHEN invalid_product THEN DBMS_OUTPUT.PUT_LINE('无效的产品编号。');结束 它不工作 正在工作。你启用 setveroutput 了吗? @Justin, sql%notfound “如果 INSERT、UPDATE 或 DELETE 语句不影响任何行,或者 SELECT INTO 语句不返回任何行,则结果为 TRUE。否则,它产生 FALSE。”。为什么在这种情况下没有意义? @Littlefoot - 你是对的。我误读了代码并删除了我的评论。

以上是关于PLS-00103:在期待以下之一时遇到符号“&”:%符号“%被插入在“&”之前继续[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PLS-00103:在期待以下之一时遇到符号“IS”::=。 ( @ % ; 非空范围默认字符

PLS-00103:预期时遇到符号“(”

PLS-00103:在预期以下情况之一时遇到符号“TEST_PKG”:;

错误:PLS-00103:在预期以下情况之一时遇到符号“)”

PLS-00103 遇到符号“数字”

PLS00103:在预期以下情况之一时遇到符号“I”