oracle – 如何从批量收集的记录类型表中选择

oracle – 如何从批量收集的记录类型表中选择,第1张

概述我有一个程序,我需要缓存一些数据,出于性能原因,下游 *** 作. 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定义有效

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;

产量:

Error(#,#): PL/sql: ORA-00942: table or vIEw does not exist

我也尝试将它包装在一个表函数中,就像我在其他地方使用我的单列类型一样,但这也不起作用

SELECT * FROM table(table_1);

Error(#,#): PL/sql: ORA-22905: cannot access rows from a non-nested
table item

解决方法 您的问题实际上是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;
总结

以上是内存溢出为你收集整理的oracle – 如何从批量收集的记录类型表中选择全部内容,希望文章能够帮你解决oracle – 如何从批量收集的记录类型表中选择所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1165781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存