暂无图片
oracle存储过程中表名变量的异常
我来答
分享
暂无图片 匿名用户
oracle存储过程中表名变量的异常

当前存储过程部分代码如下
1. for i in (select table_name,table_column from XXX) loop
2. v_table_name := i.table_name;
3. v_table_column := table_column;
4. for j in (select a,b,v_table_column from v_table_name) loop
5. ...
6. end loop;
7. end loop;
第四行这里v_table_name显示表名无效,这里应该怎么写?

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
赵勇

要用动态SQL,拼接SQL。比如:
v_sql:=‘select a,b,’||v_table_column||’ from '||v_table_name;
execute immediate v_sql;

但你这里是for j in ,所以,也要改。需要对该行及其下的整段代码做动态处理。

另外,也可以考虑对这个部分再做一个存储过程(或函数),v_table_name和v_table_column做为入参。

暂无图片 评论
暂无图片 有用 1
打赏 0
文成

1. for i in (select table_name,table_column from XXX) loop
2. v_table_name := i.table_name;
3. v_table_column := i.table_column;
4. for j in (select a,b,v_table_column from v_table_name) loop
5. ...
6. end loop;
7. end loop;

暂无图片 评论
暂无图片 有用 0
打赏 0
DarkAthena

这个肯定涉及到了动态sql,但是和一般的动态sql有点区别,这里的动态sql字符串,需要作为一个游标,可以参考下面这个例子

declare l_sql varchar2(4000) := 'select * from dba_VIEWS a where a.VIEW_name IN (''DBA_TABLES'',''DBA_VIEWS'',''DBA_TAB_COLS'') '; l_row dba_VIEWS%rowtype; type r is record( a number, b number, c varchar2(200)); l_row2 r; type cur is ref cursor; curs cur; curs_2 cur; begin open curs for l_sql; loop fetch curs into l_row; exit when curs%notfound; open curs_2 for 'select 1 a,2 b,'''||l_row.VIEW_name||''' from ' || l_row.VIEW_name||' WHERE ROWNUM<=5'; loop fetch curs_2 into l_row2; exit when curs_2%notfound; dbms_output.put_line(l_row2.a||','||l_row2.b||','||l_row2.c); end loop; close curs_2; end loop; close curs; end;
复制
暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
oracle 里创建的多个用户, 应用数据源配置的是各自的用户, 程序是一样的, 发现有串库的情况发生, A程序应该写到A用户 , 现在写到B用户下面了,怎么解决?
回答 2
已采纳
检查A用户的权限,如果权限正常,不会写到B用户的。1、查询用户有哪些角色:selectfromdbaroleprivswheregrantee'&amp;username';2、查询角色包含哪些权限:
oracle SQL文本文件的最大大小是多少?
回答 3
已采纳
在实际使用中,如果您需要处理非常大的SQL文本文件,建议先检查您所使用的操作系统和文件系统的文档,了解其对文件大小的限制。需要注意的是,处理非常大的SQL文本文件可能会对系统资源和性能产生影响。在导入
国产数据库排名
回答 2
求大神指导一下。
Oracle 中怎么查看 .dmp文件是用什么方式导出的, 是exp 还是expdp?
回答 2
已采纳
1、获取dmp文件的头信息ddifxxx.dmpofaaabs1mcount1以字符串方式查看头信息stringsaaa|moreexpdp:包含SYSEXPORTTABLEexp:包含@EXPORT
oracle怎么看某段时间内有没有删除某个数据?
回答 2
已采纳
只能进行logminor的分析,看看归档日志中有没有执行过del的SQL
Oracle 查询会不会导致数据库激增几十个G?
回答 4
已采纳
不会
安装oracle dg,是不是可以在11g的基础上进行配置主从?
回答 1
已采纳
11g可以搭建DG的呀,这个没问题。
请问各位大佬 这种事件怎么处理?
回答 2
impdp8个并行
ogg初始化数据
回答 4
可以用initload初始化,没主键的找唯一键
oracle分区表可以EXPDP直接导出吗
回答 3
导入语句加上参数:transformsegmentattributes:n