Collections 函数的成员是否处理oracle中的记录集合?
我有一个记录表索引。我可以使用函数的成员检查by PLSQL表中是否存在特定记录Collections 函数的成员是否处理oracle中的记录集合?,collections,plsql,oracle11g,Collections,Plsql,Oracle11g,我有一个记录表索引。我可以使用函数的成员检查by PLSQL表中是否存在特定记录 DECLARE TYPE emp_name_rec is RECORD( firstname varchar2(10), lastname varchar2(10), hiredate varchar2(10)); TYPE staff IS TABLE OF emp_name_rec; members staff := staff(); rec emp_name_re
DECLARE
TYPE emp_name_rec is RECORD(
firstname varchar2(10),
lastname varchar2(10),
hiredate varchar2(10));
TYPE staff IS TABLE OF emp_name_rec;
members staff := staff();
rec emp_name_rec;
rec1 emp_name_rec;
BEGIN
rec.firstname := 'peter';
rec.lastname := 'dunn';
rec.hiredate := 'x';
rec1.firstname := 'mary';
rec1.lastname := 'dunn';
rec1.hiredate := 'y';
members.extend;
members(members.last) := rec;
members.extend;
members(members.last) := rec1;
if rec member of members then
dbms_output.put_line('Yes its there');
else
dbms_output.put_line('no its not');
end if;
END;
这对我不起作用,我没有收到任何错误,除非我断开连接。。。它看起来可以编译,但会使我的会话崩溃。在Oracle 11g中尝试您的代码时,我断开了连接它不工作!照原样 从 您可以检查集合是否为空。不允许进行大于、小于等比较。此限制也适用于隐式比较。[……] 解决方案是:编写代码: […]您必须定义自己对集合大于、小于等的定义,并编写一个或多个函数来检查集合及其元素并返回真值或假值 因此,您不能直接使用的
成员,而是定义您自己的cmp_rec
函数(这一点非常明显,但对Oracle来说似乎不是):
你试过了吗?如果是这样的话,发生了什么?它对我不起作用,但我认为可能有其他语法或方法来实现这一点。在那儿吗?谢谢。我已经尝试过使用循环逻辑,这显然对我有效。我只是想确认一下功能的成员。再次非常感谢。
DECLARE
TYPE emp_name_rec is RECORD(
firstname varchar2(10),
lastname varchar2(10),
hiredate varchar2(10));
TYPE staff IS TABLE OF emp_name_rec;
members staff := staff();
rec emp_name_rec;
rec1 emp_name_rec;
rec_is_found boolean :=false;
function cmp_rec ( a emp_name_rec, b emp_name_rec)
return boolean is
begin
return a.firstname=b.firstname and a.firstname=b.firstname and a.hiredate=b.hiredate;
end cmp_rec;
BEGIN
rec.firstname := 'peter';
rec.lastname := 'dunn';
rec.hiredate := 'x';
rec1.firstname := 'mary';
rec1.lastname := 'dunn';
rec1.hiredate := 'y';
members.extend;
members(members.last) := rec;
members.extend;
members(members.last) := rec1;
-- we must loop over the collection ourselves
-- - I choosed to look it all, but we could break the loop when found
for i in 1..members.count loop
dbms_output.put_line(members(i).firstname);
if cmp_rec(members(i), rec) then
rec_is_found:=true;
end if;
end loop;
-- if rec member of members then
-- becomes
if rec_is_found then
dbms_output.put_line('Yes its there');
else
dbms_output.put_line('no its not');
end if;
END;