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

Com*_* v2 0 oracle plsql compiler-errors

请注意:我尝试过其他堆栈溢出问题,但没有解决我的问题......

我收到此错误: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;
/
Run Code Online (Sandbox Code Playgroud)

findvisitsandlaborcost定义:

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;
/
Run Code Online (Sandbox Code Playgroud)

我试过的

这些是我试图解决我的问题的一些链接,但没有奏效:

Ten*_*enG 5

错误是由这一行引起的:

v_province VARCHAR(4) := &province;

当它运行时,替换变量被完全替换为作为输入的输入。

由于变量是 VARCHAR 类型,如果输入的值是字符串,则必须用单引号输入,例如'abcd'. 如果你只是输入abcd,即没有单引号,你会得到一个错误。

一种更简洁的方法是将其编码如下:

v_province VARCHAR(4) := '&province';

现在,您可以输入abcd不带引号的 as并且它会起作用。