Oracle 12中的本地集合类型是否存在问题?
为了简短说明,我建议您讨论下面的代码.
运行时: > Oracle 11编译器引发
> Oracle 12编译下面的包,没有这样的警告,但我们在运行时有一个惊喜
问题是: CREATE OR REPLACE PACKAGE buggy_report IS SUBTYPE t_id IS NUMBER(10); TYPE t_id_table IS TABLE OF t_id; TYPE t_info_rec IS RECORD ( first NUMBER ); TYPE t_info_table IS TABLE OF t_info_rec; TYPE t_info_cur IS REF CURSOR RETURN t_info_rec; FUNCTION pipe_table(p t_id_table) RETURN t_info_table PIPELINED; FUNCTION get_cursor RETURN t_info_cur; END buggy_report; / CREATE OR REPLACE PACKAGE BODY buggy_report IS FUNCTION pipe_table(p t_id_table) RETURN t_info_table PIPELINED IS l_table t_id_table; BEGIN l_table := p; END; FUNCTION get_cursor RETURN t_info_cur IS l_table t_id_table; l_result t_info_cur; BEGIN OPEN l_result FOR SELECT * FROM TABLE (buggy_report.pipe_table(l_table)); RETURN l_result; END; END; / DECLARE l_cur buggy_report.t_info_cur; l_rec l_cur%ROWTYPE; PROCEDURE hello IS BEGIN NULL; END; BEGIN l_cur := buggy_report.get_cursor(); -- hello; LOOP FETCH l_cur INTO l_rec; EXIT WHEN l_cur%NOTFOUND; END LOOP; CLOSE l_cur; dbms_output.put_line('success'); END; /是的,在Oracle 12c中,您可以在SQL中使用本地集合类型. 文档Database New Features Guide说:
但是,我不知道你的代码为什么不工作,也许这个新功能还是有一个bug. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |