我正在尝试编写 plsql 函数,它以雇员列表(雇员列表)和雇员姓名(varchar2 类型)为参数,然后遍历列表雇员,直到找到具有相应姓名的雇员。一旦找到对象,函数就会返回员工的地址。
EMPLOYEE_OBJ 类型
CREATE OR REPLACE TYPE EMPLOYEE_OBJ AS OBJECT
(name varchar2(1000),
address varchar2(1000)
);
EMPLOYEE_OBJ_ARRAY 类型(EMPLOYEE_OBJ 数组)
CREATE OR REPLACE TYPE EMPLOYEE_OBJ_ARRAY AS VARRAY(100) OF EMPLOYEE_OBJ;
获取对象值的函数
create or replace FUNCTION GET_EMPLOYEE_ADDRESS (employee_list EMPLOYEE_OBJ_ARRAY,name varchar2)
RETURN VARCHAR2
IS
BEGIN
FOR i in 1 .. employee_list.count LOOP
IF employee_list(i).name = name THEN
return employee_list(i).address;
END IF;
END LOOP;
RETURN NULL;
END;
我得到的错误是:
ORA-24344: success with compilation error
ORA-06512: at "SYS.WWV_DBMS_SQL_APEX_190100", line 590
ORA-06512: at "SYS.DBMS_SYS_SQL", line 1658
ORA-06512: at "SYS.WWV_DBMS_SQL_APEX_190100", line 576
ORA-06512: at "APEX_190100.WWV_FLOW_DYNAMIC_EXEC", line 2033
你能帮我解决这个问题吗。还有没有更简单的方法来做到这一点?比如选择查询。
虽然提供的FUNCTION
似乎可以在至少几个版本的 Oracle 上编译和执行良好,但有一种方法可以在不迭代集合的情况下检索地址。下面是一个示例,使用您提供的类型:
CREATE OR REPLACE TYPE EMPLOYEE_OBJ AS OBJECT
(name varchar2(1000),
address varchar2(1000)
);
CREATE OR REPLACE TYPE EMPLOYEE_OBJ_ARRAY AS VARRAY(100) OF EMPLOYEE_OBJ;
和查询:
SELECT ADDRESS FROM TABLE (EMPLOYEE_OBJ_ARRAY(
EMPLOYEE_OBJ('John','Finland'),
EMPLOYEE_OBJ('Molly','Spain')))
WHERE NAME = 'John';
结果:
ADDRESS
__________
Finland
1 row selected.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句