PLSQL错误-PLS-00103:遇到符号“QUOTE”;例外情况;当你期待
我是PL/SQL新手,需要您的帮助来解决以下错误。 在尝试脚本时,我不断收到以下消息。我试图解决问题,花了一些时间来解决,但没有成功。 非常感谢您的回答/解决方案,谢谢:-)PLSQL错误-PLS-00103:遇到符号“QUOTE”;例外情况;当你期待,sql,oracle,plsql,pls-00103,Sql,Oracle,Plsql,Pls 00103,我是PL/SQL新手,需要您的帮助来解决以下错误。 在尝试脚本时,我不断收到以下消息。我试图解决问题,花了一些时间来解决,但没有成功。 非常感谢您的回答/解决方案,谢谢:-) 谢谢,, 干杯:-)您的代码几乎没有问题。请尝试以下操作: DECLARE VRO_HISAL HISAL%ROWTYPE; VRO_LOSAL LOSAL%ROWTYPE; VRO_MSGS HILOSAL_MSG%ROWTYPE; V_SAL HISA
谢谢,,
干杯:-)您的代码几乎没有问题。请尝试以下操作:
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;
声明
VRO_HISAL HISAL%行类型;
VRO_LOSAL LOSAL%行类型;
VRO_MSGS HILOSAL_MSG%行类型;
V_SAL HISAL.SAL%型;
10公里以下的例外情况;
例外情况;
开始
选择NVL(最大值(EMPNO),7000)+1
进入VRO_HISAL.EMPNO
从希萨尔;
VRO_HISAL.ENAME:='名称';
VRO_HISAL.SAL:=&工资;
VRO_LOSAL.EMPNO:=VRO_HISAL.EMPNO;
VRO_LOSAL.ENAME:=VRO_HISAL.ENAME;
VRO_LOSAL.SAL:=VRO_HISAL.SAL;
如果VRO_HISAL.SAL<10000
然后
将EX_升高到10K以下;
如果VRO_HISAL.SAL>10000,VRO_HISAL.SAL<30000
然后
提高排污费;
其他的
插入海萨尔
重视VRO_HISAL;
如果结束;
例外情况
当EX_低于10K时
然后
选择NVL(最大值(MSGNO),500)+1
进入VRO_MSGS.MSGNO
来自HILOSAL_MSG;
VRO_MSGS.MSGTXT:=
“该工资”VRO|u HISAL.SAL |“不是有效的金额”;
VRO_MSGS.MSGTIME:=TO_CHAR(系统日期'YYYY-MON-DD HH24:MI:SS');
当你离开托洛萨的时候
然后
插入LOSAL
价值观;
当找不到数据时
然后
DBMS_OUTPUT.PUT_行('无效操作');
当排得太多时
然后
DBMS_OUTPUT.PUT_LINE('结果超出预期');
当别人
然后
DBMS_OUTPUT.PUT_LINE('发生其他错误。请与管理员联系');
结束;
问题:
1) 拼写错误ELSEIF
;
2) 表名包含列empname
和代码
ename
3)在此语句中插入HISAL值(VRO_HISAL)
支架需要拆除
我不认为第一个问题是“缺少
end if
”;相反,我认为它使用的是elseif
而不是elsif
@Boneist.。谢谢。我在一个IF block
中考虑了IF block
并提出了建议。不管怎样,我根据if elsif block
@XING做出了更改是的,这是一种六合一,五六合一的情况。两者都可以,但我认为OP提供的代码作为if-elsif-else更为清晰,而不是嵌套的if,我怀疑它们的目的是什么。
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;