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;
赋值一定要用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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28