PLSQL错误-PLS-00103:遇到符号“QUOTE”;例外情况;当你期待

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

我是PL/SQL新手,需要您的帮助来解决以下错误。 在尝试脚本时,我不断收到以下消息。我试图解决问题,花了一些时间来解决,但没有成功。 非常感谢您的回答/解决方案,谢谢:-)


谢谢,,
干杯:-)

您的代码几乎没有问题。请尝试以下操作:

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;