我是 PL/SQL 新手,需要您的帮助来解决以下错误。 在尝试编写脚本时,我不断收到以下内容。我试图下定决心并花一些时间来度过,但徒劳无功。 非常感谢您的答复/解决方案,谢谢:-)
ORA-06550: line 34, column 1:
PLS-00103: Encountered the symbol "EXCEPTION" when expecting one of the following:
( begin case declare end exit for goto if loop mod null
pragma raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge
ORA-06550: line 52, column 4:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
end not pragma final instantiable order overriding static
member constructor map
Script Terminated on line 5.
原脚本是:
DECLARE
VRO_HISAL HISAL%ROWTYPE;
VRO_LOSAL LOSAL%ROWTYPE;
VRO_MSGS HILOSAL_MSG%ROWTYPE;
V_SAL HISAL.SAL%TYPE;
EX_BELOW10K EXCEPTION;
EX_TOLOSAL EXCEPTION;
BEGIN
SELECT NVL(MAX(EMPNO), 7000) + 1 INTO VRO_HISAL.EMPNO FROM HISAL;
VRO_HISAL.ENAME := '&NAME';
VRO_HISAL.SAL := &SALARY;
VRO_LOSAL.EMPNO := VRO_HISAL.EMPNO;
VRO_LOSAL.ENAME := VRO_HISAL.ENAME;
VRO_LOSAL.SAL := VRO_HISAL.SAL;
IF VRO_HISAL.SAL < 10000 THEN
RAISE EX_BELOW10K;
ELSE IF VRO_HISAL.SAL > 10000 AND VRO_HISAL.SAL < 30000 THEN
RAISE EX_TOLOSAL;
ELSE
INSERT INTO HISAL VALUES (VRO_HISAL);
END IF;
EXCEPTION
WHEN EX_BELOW10K THEN
SELECT NVL(MAX(MSGNO), 500) + 1 INTO VRO_MSGS.MSGNO FROM HILOSAL_MSG;
VRO_MSGS.MSGTXT := 'This salary '||VRO_HISAL.SAL||' is not a valid amount';
VRO_MSGS.MSGTIME := TO_CHAR (SYSDATE, 'YYYY-MON-DD HH24:MI:SS');
WHEN EX_TOLOSAL THEN
INSERT INTO LOSAL VALUES VRO_LOSAL;
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE ('Invalid operation.');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE ('Result is more than expected.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE ('Some other error occurred. Contact Admin.');
END;
使用的表:
TABLES: HISAL & LOSAL --2 tables with identical columns:
EMPNO NUMBER
EMPNAME VARCHAR2(20),
SAL NUMBER
TABLE 3: HILOSAL_MSG columns:
MSGNO NUMBER,
MSGTXT VARCHAR2(30),
MSGTIME DATE
谢谢你, 干杯:-)
最佳答案
您的代码几乎没有问题。尝试如下:
DECLARE
VRO_HISAL HISAL%ROWTYPE;
VRO_LOSAL LOSAL%ROWTYPE;
VRO_MSGS HILOSAL_MSG%ROWTYPE;
V_SAL HISAL.SAL%TYPE;
EX_BELOW10K EXCEPTION;
EX_TOLOSAL EXCEPTION;
BEGIN
SELECT NVL (MAX (EMPNO), 7000) + 1
INTO VRO_HISAL.EMPNO
FROM HISAL;
VRO_HISAL.ENAME := '&NAME';
VRO_HISAL.SAL := &SALARY;
VRO_LOSAL.EMPNO := VRO_HISAL.EMPNO;
VRO_LOSAL.ENAME := VRO_HISAL.ENAME;
VRO_LOSAL.SAL := VRO_HISAL.SAL;
IF VRO_HISAL.SAL < 10000
THEN
RAISE EX_BELOW10K;
ELSIF VRO_HISAL.SAL > 10000 AND VRO_HISAL.SAL < 30000
THEN
RAISE EX_TOLOSAL;
ELSE
INSERT INTO HISAL
VALUES VRO_HISAL;
END IF;
EXCEPTION
WHEN EX_BELOW10K
THEN
SELECT NVL (MAX (MSGNO), 500) + 1
INTO VRO_MSGS.MSGNO
FROM HILOSAL_MSG;
VRO_MSGS.MSGTXT :=
'This salary ' || VRO_HISAL.SAL || ' is not a valid amount';
VRO_MSGS.MSGTIME := TO_CHAR (SYSDATE, 'YYYY-MON-DD HH24:MI:SS');
WHEN EX_TOLOSAL
THEN
INSERT INTO LOSAL
VALUES VRO_LOSAL;
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE ('Invalid operation.');
WHEN TOO_MANY_ROWS
THEN
DBMS_OUTPUT.PUT_LINE ('Result is more than expected.');
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE ('Some other error occurred. Contact Admin.');
END;
问题:
1) Misspelt
ELSEIF
; 2) Your table name has columnempname
and codeename
3)INSERT INTO HISAL VALUES (VRO_HISAL)
at this statement brackets need to be removed.
关于sql - PLSQL 错误 - PLS-00103 : Encountered the symbol "EXCEPTION" when expecting one of,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41181929/