Я пытаюсь использовать SQL "ADD_YEARS" в процедуре Oracle PLSQL.
Однако (при условии, что он действительно виноват) при компиляции возникает ошибка: «неверный идентификатор».
Я подозреваю, что это потому, что ADD_YEARS - это что-то из SQL, а не PLSQL. Кажется, они не любят друг друга. Единственный способ сделать это - создать локальную переменную и присвоить ей результат, который я обычно получал из ADD_YEARS. Однако, когда я пытался, я не мог понять, как на самом деле ... присвоить это значение. Есть SELECT INTO, но в этом случае это имеет смысл 0
-- If in good standing, extend membership 1 year.
-- If not but within grace (6 months), extend to 1 year from today.
-- Otherwise, explain renewal involves penalty. If no ID, print message.
CREATE OR REPLACE PROCEDURE renew(id1 IN member.id%type) IS
temp1 member.expr_date%type;
BEGIN
SELECT expr_date INTO temp1 FROM member WHERE id = id1;
IF temp1 > CURRENT_DATE THEN
UPDATE member
SET expr_date = ADD_YEARS(expr_date, 1)
WHERE id = id1;
ELSIF ADD_MONTHS(temp1, 6) > CURRENT_DATE THEN
UPDATE member
SET expr_date = ADD_YEARS(CURRENT_DATE, 1)
WHERE id = id1;
ELSE
dbms_output.put_line('Renewal will incur a penalty!');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('That ID does not exist as a member!');
END;
/
show errors
Вот ошибка, которую я получаю:
Errors for PROCEDURE RENEW:
LINE/COL ERROR
-------- -----------------------------------------------------------------
7/3 PL/SQL: SQL Statement ignored
8/19 PL/SQL: ORA-00904: "ADD_YEARS": invalid identifier
11/3 PL/SQL: SQL Statement ignored
12/19 PL/SQL: ORA-00904: "ADD_YEARS": invalid identifier
Большое спасибо за любую помощь! Я все еще очень плохо знаком с SQL и PL / SQL. Преодолеть некоторые его причуды было сложно.