Как я могу решить эту ошибку pl / sql объявить? - PullRequest
0 голосов
/ 08 января 2020
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 current max существует max мин. предыдущий sql отклонение суммы stddev выполнить полный интервал времени слияния временная метка конвейер даты

Я написал этот код sql, но произошла ошибка. Пожалуйста, помогите мне ..

1 Ответ

2 голосов
/ 08 января 2020

Вам не хватает условия 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;
/
...