+ -
当前位置:首页 → 问答吧 → oracle动态游标问题 有没办法获取动态游标中的字段信息!!!

oracle动态游标问题 有没办法获取动态游标中的字段信息!!!

时间:2011-07-20

来源:互联网

oracle动态游标问题: 游标查询的内容是 动态生成的,然后里面具体有多少个字段没办法事先知道,而动态游标

赋值一定要用fetch到一个变量,有没办法把动态游标内容赋值到一个记录集或者表中,而这个表的字段和记录集字段是没办法预先定义好的,而是通过系统动态生成的!
具体例子如下:
declare 
  -- Local variables here
  v_sql VARCHAR2(1024);
  cur SYS_REFCURSOR;
  v_column VARCHAR2(1024);
  v_exe VARCHAR2(1024);
begin
  ---v_sql 是通过一连串的复杂逻辑程序生成的动态内容的 在这里就简单写了
  v_sql:='select C_001,b_002,d_003 ..../*具体有多少个字段没办法事先知道*/from table1,table2 .../*具体有多少个字段没办法事先知道*/tablen where 1=1 and /*复杂条件*/';
  v_column:= 'C_001+b_002/d_003';--这个变量也是通过复杂的逻辑生成的 没办法事先知道的 但是这里的字段都在 v_sql 中有 
  --在这里 在 字段前面加上表模式 (用正则表达式怎么写 regexp_replace) 
  --v_column := replace(replace(REPLACE(v_column,'b_','c.b_'),'c_','c.c_'),,'c_','c.d_');
  v_column := regexp_replace(v_column,'(c_|d_|b_)','c.\1');
V_CASE_WHEN:=regexp_replace(upper(V_CASE_WHEN),'(MT_|T_|M_|B_|R_)', 'CUR_LOOP.\1');
  OPEN cur FOR v_sql;
  LOOP
  FETCH cur BULK COLLECT INTO e_table ;--但是这边表/记录集 里面的字段没办法定义 因为没办法事先知道表的结构 有没 什么办法(定义 e_talbe )
  FOR i IN 1..e_table(i);
  v_exe:='INSERT INTO table_a SELECT'|| v_column||' FROM dual' ; /*这里的动态生成的*/
  EXECUTE IMMEDIATE v_exe;
  COMMIT;
  END LOOP;
end;

作者: xjh023925   发布时间: 2011-07-20

你实现了吗,我也正好要找这个

作者: yuji821   发布时间: 2011-10-25

游标里面的东西是可以读出来的,手头没有例子,让我找找

作者: guostong   发布时间: 2011-10-25

热门下载

更多