【问题标题】:PLS-00302: component 'EXISTS' must be declaredPLS-00302:必须声明组件“EXISTS”
【发布时间】:2019-01-25 09:31:37
【问题描述】:

我确实遇到以下函数的问题,不断收到错误

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

在测试我的功能时。如果我删除 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;
/ 

【问题讨论】:

    标签: plsql oracle11g


    【解决方案1】:

    我猜(i) 移到了错误的位置,实际上应该是exists 的参数?再次将其移动到正确的位置。

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

    【讨论】:

    • 哎呀,谢谢!但是在再次正确放置之后,它给出了一个错误,FIRST 说:PLS-00302:必须声明组件'FIRST_NAME'
    • @AstridBagué:你的类型声明中没有first_name,而是f_name,这大概就是你想要的...
    • 非常感谢,我改编了!没有错误了,但不幸的是它也没有显示员工:(
    • @Astrid,您在执行dbms_output.put_line 之前是否set serveroutput on?如果没有,你应该有。如果您正在使用一些 GUI 工具,您可能必须“单击”某处才能启用它。在 SQL*Plus 中,您将在 SQL> 提示符处准确运行 set 命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 2021-01-06
    • 2015-04-26
    • 2021-08-13
    相关资源
    最近更新 更多