PLS-00103:在预期以下情况之一时遇到符号“ON”
Posted
技术标签:
【中文标题】PLS-00103:在预期以下情况之一时遇到符号“ON”【英文标题】:PLS-00103: Encountered the symbol "ON" when expecting one of the following 【发布时间】:2020-07-05 16:56:47 【问题描述】:请注意:我尝试了其他堆栈溢出问题,但没有一个能解决我的问题...
我收到此错误:PLS-00103: Encountered the symbol "ON" when expecting one of the following
,代码如下:
SET SERVEROUTPUT ON;
DECLARE
v_province VARCHAR(4) := &province;
v_numberOfVisits NUMBER;
v_totallaborcost NUMBER;
BEGIN
findvisitsandlaborcost(v_numberofvisits, v_totallaborcost, v_province);
dbms_output.put_line('Number of visits for province '
|| v_province
|| ': '
|| v_numberofvisits);
dbms_output.put_line('Total labor cost for province '
|| v_province
|| ': '
|| v_totallaborcost);
END;
/
查找访问和人工成本定义:
CREATE OR REPLACE PROCEDURE findvisitsandlaborcost (
numberofvisits OUT NUMBER,
totallaborcost OUT NUMBER,
province VARCHAR
) AS
v_numberofvisits si.servinv.servinvno%TYPE;
v_totallaborcost si.servinv.laborcost%TYPE;
BEGIN
SELECT
COUNT(servinvno) AS "Number of Visits",
SUM(laborcost) AS "Total labor cost"
INTO
v_numberofvisits,
v_totallaborcost
FROM
si.servinv si
WHERE
si.custname IN (
SELECT
custname
FROM
si.customer
WHERE
custprovince = province
);
numberofvisits := v_numberofvisits;
totallaborcost := v_totallaborcost;
END;
/
我的尝试
这些是我试图解决我的问题但没有成功的一些链接:
PLS-00103: Encountered the symbol ";" when expecting one of the following:
https://kb.informatica.com/solution/3/Pages/14954.aspx
https://github.com/dbeaver/dbeaver/issues/2785
https://it.toolbox.com/question/pls-00103-encountered-the-symbol-when-expecting-one-of-the-following-070710
https://logic.edchen.org/how-to-resolve-pls-00103-encountered-the-symbol-when-expecting-one-of-the/
【问题讨论】:
我能看到的唯一“开启”在SET SERVEROUTPUT ON;
行中。这是一个只有 SQLPLUS 或类似的命令才能理解的命令。如果您在 JDBC 或 .Net 之类的东西上运行此代码,那么它就没有意义了。尝试不使用SET SERVEROUTPUT ON;
,看看是否有帮助。如果不是,请详细说明您使用的是哪种工具/语言。
@TenG 不,仍然是同样的错误。我的环境识别SET SERVEROUTPUT ON
。顺便说一下,我正在使用 SQL 开发人员和 Oracle。
你有这个替换变量 ` &province ` 。您为此值输入的究竟是什么?请记住,您输入的内容正是 ` &province` 被替换的内容,因此如果要添加字符串值,则必须包含单引号。
@TenG 是的,解决了!我没有单引号,我把它改成了单引号。现在我的程序中出现了另一个新错误。谢谢!
@TenG 请回答我的问题,我会给你正确的答案...
【参考方案1】:
错误是由这一行引起的:
v_province VARCHAR(4) := &province;
当它运行时,替换变量被完全替换为作为输入的键。
由于变量是VARCHAR类型,如果输入的值是字符串,则必须用单引号输入,例如'abcd'
。如果你只输入abcd
,即没有单引号,你会得到一个错误。
一种更简洁的方法是将其编码如下:
v_province VARCHAR(4) := '&province';
现在,您可以输入不带引号的abcd
,它会起作用。
【讨论】:
并且,为了澄清最后一个细节:很可能 OP 输入了输入ON
(对于加拿大安大略省,或者可能是另一个国家的具有相同省代码的省)。然后执行引擎看到 v_province varchar(4) := ON
与 RHS 看起来像一个变量名或语言关键字,因为它没有被引用 - 并且咳嗽,因为标记 ON
在这种情况下没有意义。以上是关于PLS-00103:在预期以下情况之一时遇到符号“ON”的主要内容,如果未能解决你的问题,请参考以下文章
为啥我会收到此错误? PLS-00103:在预期以下情况之一时遇到符号“CREATE”: