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”的主要内容,如果未能解决你的问题,请参考以下文章

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

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

为啥我会收到此错误? PLS-00103:在预期以下情况之一时遇到符号“CREATE”:

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

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

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