oracle – 如何从批量收集的记录类型表中选择
发布时间:2021-05-14 12:08 所属栏目:[站长百科] 来源:网络整理
导读:我有一个程序,我需要缓存一些数据,出于性能原因,下游操作. TYPE定义有效 BULK COLLECT INTO有效 SELECT不起作用 PROCEDURE MYPROC((PARAMS))AS TYPE REC_TYPE IS RECORD ( COLUMN_1 (TABLEA.COLUMN_A)%TYPE,COLUMN_2 (TABLEA.COLUMN_B)%TYPE ); TYPE TAB_T
我有一个程序,我需要缓存一些数据,出于性能原因,下游操作. TYPE定义有效 BULK COLLECT INTO有效 SELECT不起作用 PROCEDURE MYPROC((PARAMS))AS TYPE REC_TYPE IS RECORD ( COLUMN_1 (TABLEA.COLUMN_A)%TYPE,COLUMN_2 (TABLEA.COLUMN_B)%TYPE ); TYPE TAB_TYPE IS TABLE OF REC_TYPE; TABLE_1 TAB_TYPE; BEGIN SELECT COLUMN_A,COLUMN_B BULK COLLECT INTO TABLE_1 FROM TABLE_A; SELECT * FROM TABLE_1; END MYPROC; 产量:
我也尝试将它包装在一个表函数中,就像我在其他地方使用我的单列类型一样,但这也不起作用 SELECT * FROM TABLE(TABLE_1);
解决方法您的问题实际上是PLS-00642错误,而不是ORA-22905.实质上,您不能在SQL语句中使用本地集合类型.因此,解决方案是在架构级别定义类型.以这种方式定义类型时,我们不能使用%TYPE语法,而是必须明确定义列( Getting PLS-00201 error while creating a type in oracle),即create or replace type rec_type as object ( COLUMN_1 integer,COLUMN_2 varchar2(128) ); create or replace type tab_type as table of rec_type; 然后,您需要将值显式转换为相关类型,以便执行批量收集,如下所述:ORA-00947 Not enough values while declaring type globally. 因此,您的程序将如下所示: PROCEDURE MYPROC((PARAMS))AS TABLE_1 TAB_TYPE; lCount integer; BEGIN SELECT REC_TYPE(COLUMN_A,COLUMN_B) BULK COLLECT INTO TABLE_1 FROM TABLE_A; SELECT COUNT(*) INTO lCount FROM TABLE(TABLE_1); END MYPROC; 【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。 |
推荐文章
热点阅读