请教DBMS_METADATA.GET_DDL报错 error stack
pl/sql执行
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
FROM ALL_TABLES u
WHERE u.owner = 'COMM' and u.nested='NO'
AND (u.iot_type is null or u.iot_type='IOT');
error stack
CMD窗口执行
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
2 FROM ALL_TABLES u
3 WHERE u.owner = 'COMM' and u.nested='NO'
4 AND (u.iot_type is null or u.iot_type='IOT');
ERROR:
ORA-31603: 对象 "AAAA" 属于类型 TABLE, 在方案 "SYS" 中未找到
ORA-06512: 在 "SYS.DBMS_METADATA", line 1968
ORA-06512: 在 "SYS.DBMS_METADATA", line 2011
ORA-06512: 在 "SYS.DBMS_METADATA", line 2343
ORA-06512: 在 "SYS.DBMS_METADATA", line 3247
ORA-06512: 在 "SYS.DBMS_METADATA", line 4863
ORA-06512: 在 line 1
我看网上的解释是共享池和java pool太小了 我手动更改了一下 还是报这个错
在此请教各位高手了
------解决方案--------------------数据量太大了,那就写个循环来取吧
SQL code
begin
for rec in (
select table_name from all_tables u
where u.owner = 'COMM' and u.nested='NO'
and (u.iot_type is null or u.iot_type='IOT')) loop
dbms_output.put_line(dbms_metadata.get_ddl('TABLE', rec.table_name));
end loop;
end;
------解决方案--------------------
提示很明确,ORA-31603: 对象 "AAAA" 属于类型 TABLE, 在方案 "SYS" 中未找到
这个表是用户 COMM的,而不是sys的。
所以,再调用的时候,应该加上属主参数
DBMS_METADATA.GET_DDL('TABLE',u.table_name,'COMM');