【问题标题】:how can i resolve this pl/sql declare error?我该如何解决这个 pl/sql 声明错误?
【发布时间】:2020-01-08 11:10:35
【问题描述】:
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 continue avg count current exists max min prior sql stddev sum variance执行forall合并时间时间戳间隔日期管道

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

【问题讨论】:

  • 您的 SELECT 需要一个 INTO 子句。

标签: oracle plsql


【解决方案1】:

您的第二个和第三个SELECT 语句缺少INTO 子句。

但是,我会跳过使用第一个 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;
/

【讨论】:

    猜你喜欢
    • 2023-02-22
    • 2016-07-21
    • 2016-09-09
    • 2015-02-28
    • 2013-08-16
    • 2020-04-17
    相关资源
    最近更新 更多