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)
我试过的
这些是我试图解决我的问题的一些链接,但没有奏效:
错误是由这一行引起的:
v_province VARCHAR(4) := &province;
当它运行时,替换变量被完全替换为作为输入的输入。
由于变量是 VARCHAR 类型,如果输入的值是字符串,则必须用单引号输入,例如'abcd'. 如果你只是输入abcd,即没有单引号,你会得到一个错误。
一种更简洁的方法是将其编码如下:
v_province VARCHAR(4) := '&province';
现在,您可以输入abcd不带引号的 as并且它会起作用。