【发布时间】:2021-12-01 10:41:01
【问题描述】:
我有一个函数和过程。一个过程调用一个函数。 当我使用创建或替换将该函数和过程创建为模式对象时,一切正常:
create or replace FUNCTION is_highest_paid (
emp_id employees.employee_id%TYPE,
avg_sal NUMBER
) RETURN CHAR AS
is_highest CHAR(1);
BEGIN
SELECT 'Y'
INTO is_highest
FROM employees
WHERE employee_id = emp_id
AND salary > avg_sal;
RETURN is_highest;
END;
create or replace PROCEDURE fill_high_paid_emps AS
avg_sal NUMBER;
BEGIN
SELECT AVG(salary)
INTO avg_sal
FROM employees;
INSERT INTO highest_paid_employees
SELECT *
FROM employees
WHERE is_highest_paid(employees.employee_id, avg_sal) = 'Y';
END;
begin
fill_high_paid_emps();
end;
但是一旦我尝试在这样的匿名块中本地使用它们:
DECLARE
FUNCTION is_highest_paid (
emp_id employees.employee_id%TYPE,
avg_sal NUMBER
) RETURN CHAR AS
is_highest CHAR(1);
BEGIN
SELECT 'Y'
INTO is_highest
FROM employees
WHERE employee_id = emp_id
AND salary > avg_sal;
RETURN is_highest;
END;
PROCEDURE fill_high_paid_emps AS
avg_sal NUMBER;
BEGIN
SELECT AVG(salary)
INTO avg_sal
FROM employees;
INSERT INTO highest_paid_employees
SELECT *
FROM employees
WHERE is_highest_paid(employees.employee_id, avg_sal) = 'Y';
END;
BEGIN
fill_high_paid_emps();
END;
我得到: PLS-00231:函数 'IS_HIGHEST_PAID' 不能在 SQL 中使用
PL/SQL: ORA-00904: : 无效标识符
这是什么原因?
【问题讨论】: