我该如何解决此pl / sql声明错误?

时间:2020-01-08 11:10:35

标签: oracle plsql

DECLARE
    COUNTING1 NUMBER(1);
BEGIN
    SELECT COUNT(VACATION_REMAINING_COUNT)
    INTO COUNTING1
    FROM VACATION
    WHERE NAME = :P0_VNAME;

    IF COUNTING1 > 0 THEN
        SELECT VACATION_REMAINING_COUNT
        FROM
        (
            SELECT ROW_NUMBER() OVER (ORDER BY CREATED DESC) ROW_ID,
                   V.VACATION_REMAINING_COUNT 
            FROM VACATION V
            WHERE NAME = :P0_VNAME
        )
        WHERE ROW_ID = 1;
    ELSE
        SELECT USER_YEAR_VACATION FROM VA_USER WHERE NAME = :P0_VNAME;
    END IF;
END;

ORA-06550:第1行,第114列:PLS-00103:在预期以下情况之一时遇到了符号“ DECLARE”:(-+ case mod new not null继续avg count当前存在max min以前的sql stddev总和方差执行全部合并时间时间戳记间隔日期管道

我写了这个sql代码。但是发生了错误。 请帮助我。

1 个答案:

答案 0 :(得分:2)

第二和第三条INTO语句缺少SELECT子句。

但是,我会跳过使用第一个COUNT语句,而只是尝试查找最新的行并捕获NO_DATA_FOUND异常(如果发生):

DECLARE
  p_vacation_remaining VACATION.VACATION_REMAINING_COUNT%TYPE;
BEGIN
  BEGIN
    SELECT vacation_count_remaining
    INTO   p_vacation_remaining
    FROM   vacation
    WHERE  name = :P0_VNAME
    ORDER BY created DESC
    FETCH FIRST 1 ROW ONLY;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      SELECT USER_YEAR_VACATION
      INTO   p_vacation_remaining
      FROM   VA_USER
      WHERE NAME = :P0_VNAME;
  END;

  -- Do something with p_vacation_remaining
  DBMS_OUTPUT.PUT_LINE( p_vacation_remaining );
END;
/