Plsql PLS-00302:必须声明组件“存在”

Plsql PLS-00302:必须声明组件“存在”,plsql,oracle11g,Plsql,Oracle11g,我真的有问题,下面的函数,不断得到错误 PLS-00302:必须声明组件“存在” 在测试我的功能时。如果我删除If语句,他会给出一个必须声明的FIRST也是的错误 如果有人能帮我,那将意味着整个世界 CREATE OR REPLACE PACKAGE hr_package IS TYPE seniority_type_rec IS RECORD (f_name employees.first_name%TYPE, l_name employees.last_name%TYPE, se

我真的有问题,下面的函数,不断得到错误

PLS-00302:必须声明组件“存在”

在测试我的功能时。如果我删除If语句,他会给出一个必须声明的FIRST也是的错误

如果有人能帮我,那将意味着整个世界

CREATE OR REPLACE PACKAGE hr_package IS    

TYPE seniority_type_rec IS RECORD (f_name employees.first_name%TYPE, l_name 
employees.last_name%TYPE, seniority NUMBER);
TYPE seniority_table_type IS TABLE OF seniority_type_rec INDEX BY 
PLS_INTEGER;
FUNCTION calc_seniorities (p_seniority PLS_INTEGER) RETURN 
seniority_table_type ;        

END hr_package;   
/

/*  DEEL 2: PACKAGE BODY */

CREATE OR REPLACE PACKAGE BODY hr_package IS 


/* needs to return a list of employees with seniority over the parameter 
p_seniority using bulk sql, return type seniority_table_type with first 
name, last name and seniority*/

FUNCTION calc_seniorities (p_seniority PLS_INTEGER) 
RETURN seniority_table_type IS 
emp_table seniority_table_type;

BEGIN 
SELECT first_name, last_name, p_seniority BULK COLLECT INTO emp_table FROM 
job_history h join employees e on h.employee_id = e.employee_id WHERE 
FLOOR((MONTHS_BETWEEN(start_date,end_date))/12) >= p_seniority;
return emp_table;
END; 

END hr_package;
/

/*  DEEL 3: TESTCODE */

DECLARE
query_result hr_package.seniority_table_type;
BEGIN query_result := hr_package.calc_seniorities(5);
FOR i IN 1..query_result.COUNT LOOP
if query_result(i).exists then 
DBMS_OUTPUT.PUT_LINE(query_result(i).first_name);
end if;
END LOOP;
END;
/ 
我猜我转移到了一个错误的地方,实际上应该是存在的论点?再次将其移动到正确的位置

...
if query_result.exists(i) then
...

哦,是的,谢谢你!但在再次正确放置后,它给出了一个错误,第一句是:PLS-00302:组件“FIRST_NAME”必须是declared@AstridBagué:在您的类型声明中没有first_name,而是f_name,这大概是您想要的……非常感谢,我修改了它!不再出现错误,但它也不会显示员工。很遗憾:@Astrid,在执行dbms\u output.put\u行之前,您是否已打开serveroutput?如果没有,你应该有。如果您正在使用某个GUI工具,您可能需要单击某个位置来启用它。在SQL*Plus中,您可以在SQL>提示符下运行set命令。