有关clob的execute immediate问题

yadang09 2015-04-23 04:38:08
我想通过以下代码收集表的一些信息
输入参数:masamk.tb_mk_user_base_info_day_v2
输出str5的值为:select dbms_metadata.get_ddl('TABLE','TB_MK_USER_BASE_INFO_DAY_V2','MASAMK' ) from dual ,这个字符串没有问题
但是在执行到execute immediate str5 into str6_clob时,老是报错
报错信息:

我用的是oracle11g的
请教给位大神:代码哪里有问题,是clob对象的原因吗?该怎么改?
拜谢!
代码如下:
create or replace procedure masakr.table_info(str varchar2)
is
str1 varchar2(100);
str2 varchar2(50);
str3 varchar2(50);
str4 varchar2(50);
str5 varchar2(500);
str6_clob clob;
str7 varchar2(500);
str8 varchar2(100);--是否分区
str9 varchar2(500);
x number;
y number;--表大小
begin
str1:='select upper('''||str||''') from dual';
execute immediate str1 into str2;
str3:=substr(str2,1,instr(str2,'.')-1);
str4:=substr(str2,instr(str2,'.')+1,length(str2)-instr(str2,'.'));
--dbms_output.put_line(str||chr(10)||str3||' '||str4);
str5:='select dbms_metadata.get_ddl('''||'TABLE'||''','''||str4||''','''||str3||''' )
from dual';
dbms_output.put_line(str5);
execute immediate str5 into str6_clob;
x:=dbms_lob.instr(str6_clob,'PARTITION BY',1,1);
if x!=0 then
str8:='是分区表,分区信息:'||dbms_lob.substr(str6_clob,30,x);
else str8:='不是分区表';
end if;
--dbms_output.put_line(str8);
select sum(bytes)/1024/1024 into y
from dba_segments
where owner=str3 and segment_name=str4
group by segment_name;
str9:=str3||'.'||'str4'||':表大小:'||y||' ,'||str8;
dbms_output.put_line(str9);
end;


...全文
403 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yadang09 2015-04-25
  • 打赏
  • 举报
回复
恩,对,大脑短路了,老想着用动态sql,我查了一下,有可能是用户权限的问题。 感谢大神的热情回复!
Tiger_Zhao 2015-04-24
  • 打赏
  • 举报
回复
这个到想不到原因了。

不过既然是固定查询,为什么还要execute immediate,直接用下面的语句不就行了?
select dbms_metadata.get_ddl('TABLE',str4,str3)
into str6_clob
from dual;
yadang09 2015-04-23
  • 打赏
  • 举报
回复
单独执行没问题,能出结果
Tiger_Zhao 2015-04-23
  • 打赏
  • 举报
回复
你单独执行 select dbms_metadata.get_ddl('TABLE','TB_MK_USER_BASE_INFO_DAY_V2','MASAMK' ) from dual 没错吗?
提示是表不存在啊。

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧