Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题
2010-08-22 16:13
609 查看
在实际PL/SQL编程中,我们要对动态取出来的一组数据,进行For循环处理,其基本程序逻辑为:
执行:exec getidlist;
提示错误:ORA-22905: cannot access rows from a non-nested table item
再次修改getidlist代码如下:
关于错误:ORA-22905: cannot access rows from a non-nested table item 的解决方案,不知各位大侠有没有更好的解决方案?请指教。
invalid number,ORA-06512: at "TT.GETIDLIST", line 6 解决方案: CREATE OR REPLACE TYPE type_split IS TABLE OF VARCHAR2 (4000);
create or replace procedure getidlist is l_idlist varchar2(200); begin l_idlist:='1,2,3,4'; for brrs in (select * from bldroom where bldroomid in (select column_value from table(split(l_idlist,',')))) loop brrs.structure:='钢混'; end loop; end; / show err;
执行:exec getidlist;
提示错误:ORA-22905: cannot access rows from a non-nested table item
再次修改getidlist代码如下:
OK,搞定。 附:PL/SQL表---table()函数用法 摘录 /* 利用table()函数,我们可以将PL/SQL返回的结果集代替table。 oracle内存表在查询和报表的时候用的比较多,它的速度相对物理表要快几十倍。 */ /* simple example: 1、table()结合数组: */ create or replace type t_test as object( id integer, rq date, mc varchar2(60) ); create or replace type t_test_table as table of t_test; create or replace function f_test_array(n in number default null) return t_test_table as v_test t_test_table := t_test_table(); begin for i in 1 .. nvl(n,100) loop v_test.extend(); v_test(v_test.count) := t_test(i,sysdate,'mc'||i); end loop; return v_test; end f_test_array; / select * from table(f_test_array(10)); select * from the(select f_test_array(10) from dual); /* 2、table()结合PIPELINED函数: */ create or replace function f_test_pipe(n in number default null) return t_test_table PIPELINED as v_test t_test_table := t_test_table(); begin for i in 1 .. nvl(n,100) loop pipe row(t_test(i,sysdate,'mc'||i)); end loop; return; end f_test_pipe; / select * from table(f_test_pipe(20)); select * from the(select f_test_pipe(20) from dual); /* 3、table()结合系统包: */ create table test (id varchar2(20)); insert into test values('1'); commit; explain plan for select * from test; select * from table(dbms_xplan.display);
关于错误:ORA-22905: cannot access rows from a non-nested table item 的解决方案,不知各位大侠有没有更好的解决方案?请指教。
相关文章推荐
- oracle sql中使用contains函数解决like in %组合使用 的问题
- oracle 使用IN 不能超过1000问题的解决(oracle中列表中的最大表达式数为 1000)
- 解决在IE6下使用display: inline-block;的不兼容性问题
- Git 使用中显示“Another git process seems to be running in this repository...”的提示问题解决办法
- 第14周报告2:使用函数解决实际问题
- 使用PL/SQL Developer连接远程oracle客户端报错问题解决记录
- oracle initialization or shutdown in progress问题解决步骤
- 解决oracle,db2数据库 在不使用的时候,系统服务的问题。
- 解决Robot Framework 使用cx_Oracle连接Oracle数据库中文不识别的问题
- oracle 11g使用exp导出空表问题解决办法
- 解决使用CImage类的Draw函数在显示图片时引起的图像失真问题
- 转:邹建--使用TableDiff实用工具解决事务复制中的问题
- 使用第三方库的解决windows下Apache+PHP调用SSL函数假死问题
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- 解决ASP.NET MVC 下使用SQLite 报no such table的问题
- 怎么解决STM32(MDK)中不能使用printf()函数的问题
- Oracle使用sqlplus和rman无法使用退格、上翻键乱码等问题的解决办法
- 第14周报告2:使用函数解决实际问题
- jQuery自定义动画函数animate() easing: "easeInOutCirc"导致的animate()动画抖动问题解决方法
- 在ASP.NET MVC 4 on Mono中使用OracleClient in CentOS 6.x的问题记录