我想通过以下代码收集表的一些信息
输入参数: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;