我尝试从嵌套表中选择值并批量收集到关联数组集合中。当我尝试批量收集oracle抛出上述异常时(PL / SQL:SQL语句被忽略 PL / SQL:ORA-22905:无法访问非嵌套表中的行 虽然我从嵌套表中获取数据。
在所有情况下都没有发生。当在不同的客户端数据库中编译相同的包时,有些情况下它不会抛出错误,并且在某些环境中,它会抛出错误。你能帮忙解决一下这个问题吗?
我没有附上整个包裹。而是提供了问题发生的情况。
DECLARE
TYPE rc_rec_multiset IS record (
rc_id NUMBER,
doc_num VARCHAR2(100)
);
TYPE rc_type IS TABLE OF rc_rec_multiset;
TYPE tab_rec_type_multiset IS
TABLE OF rc_rec_multiset INDEX BY pls_integer;
rc_tab_type rc_type := rc_type() ;
rc_tab_type_dist_rc tab_rec_type_multiset;
BEGIN
SELECT DISTINCT rc_id,
doc_num BULK COLLECT
INTO rc_tab_type_dist_rc
FROM TABLE(rc_tab_type);
END;
答案 0 :(得分:0)
你不能用SQL做到这一点;关联数组是PL / SQL数据类型,不能在SQL范围内使用。类似地,PL / SQL作用域中定义的集合不能在SQL作用域中使用(在11g及更早版本中) - 您需要在SQL作用域中定义集合(注意 - 您不能对关联数组执行此操作,因为它们纯粹是PL / SQL)或只使用PL / SQL。
假设rc_tab_type
集合不稀疏,那么您可以像这样使用纯PL / SQL:
DECLARE
TYPE rc_rec_multiset IS record (
rc_id NUMBER,
doc_num VARCHAR2(100)
);
TYPE rc_type IS TABLE OF rc_rec_multiset;
TYPE tab_rec_type_multiset IS
TABLE OF rc_rec_multiset INDEX BY pls_integer;
rc_tab_type rc_type := rc_type();
rc_tab_type_dist_rc tab_rec_type_multiset;
BEGIN
/*
* Populate rc_tab_type here.
*/
FOR i IN 1 .. rc_tab_type.COUNT LOOP
rc_tab_type_dist_rc( rc_tab_type(i).rc_id ) := rc_tab_type(i).doc_num;
END LOOP;
END;
如果它是稀疏的,那么你将不得不使用:{/ p>而不是FOR
循环。
i := rc_tab_type.FIRST;
WHILE i IS NOT NULL LOOP
rc_tab_type_dist_rc( rc_tab_type(i).rc_id ) := rc_tab_type(i).doc_num;
i := rc_tab_type.NEXT(i);
END LOOP;