Collections 处理PL/SQL集合
我有以下声明要收集Collections 处理PL/SQL集合,collections,plsql,oracle11g,bulkinsert,forall,Collections,Plsql,Oracle11g,Bulkinsert,Forall,我有以下声明要收集 TYPE T_TABLE1 IS TABLE OF TABLE_1%ROWTYPE INDEX BY BINARY_INTEGER; tbl1_u T_TABLE1; tbl1_i T_TABLE1; 此表将不断增长,最后将在FORALL循环中用于对表1进行插入或更新 现在可能有一些情况,我想删除某个元素。因此,我计划创建一个过程,该过程将获取密钥(唯一)并匹配元素(如果找到该密钥) psedou码 FOR i in tbl1
TYPE T_TABLE1 IS TABLE OF TABLE_1%ROWTYPE INDEX BY BINARY_INTEGER;
tbl1_u T_TABLE1;
tbl1_i T_TABLE1;
此表将不断增长,最后将在FORALL循环中用于对表1进行插入或更新
现在可能有一些情况,我想删除某个元素。因此,我计划创建一个过程,该过程将获取密钥(唯一)并匹配元素(如果找到该密钥)
psedou码
FOR i in tbl1_u.FIST..tbl1_u.LAST
LOOP
if tbl1_u(i).key = key then
tbl1.delete(i);
end if;
END LOOP;
我的问题是,
假定TabelY1.KEY是唯一的,您可以考虑使用它作为关联数组的索引。这样,您就可以使用键值从集合中删除,根据伪代码,在执行删除操作时,键值是可用的。这还可以避免您必须在表中迭代以找到所需的键,因为键就是索引-因此您的“删除”伪代码将变成:
tbl1_u.delete(key);
回答您的问题:
分享和享受 TABLE_1.KEY是否唯一?是的,TABLE_1.KEY是否唯一?能否详细说明如何按KEY为我的收藏编制索引?其次,我将根据每次插入集合后保存的数组索引插入集合。类似于
tbl1_1(idx)的soemthing。key:=key代码>然后idx:=idx+1代码>。现在您提到索引不会改变,这是否意味着我在数组中的下一次插入将使我删除的索引为空,这可能会导致表中的空插入?好的,所以我解决了问题的第二部分。。。i、 e.我可以在表1的索引中使用保存异常
语句。现在您可以删除我的第一个问题,即使用键作为索引吗?您的集合类型(T_TABLE1)是一个关联数组,由一个数值索引。关联数组的工作方式与其他语言中的哈希表类似,因为“索引”类似于数据库表上的索引—它是用于查找数据的键,而不是值列表中的物理偏移量。如果TABLE_1.KEY是一个数字,您可以将它用作这些关联数组的索引-因此您可以执行tbl1_1(KEY)。KEY:=KEY
。这意味着您不再需要idx
。看见共享和享受。至于“…这是否意味着我在数组中的下一次插入将使我删除的索引为空,从而可能导致表中的空插入?”-不。关联数组有点像链表-当您删除一个元素时,它就消失了,并且没有“空白”了。分享和享受。