当前位置: 代码迷 >> Oracle技术 >> 请问DBMS_METADATA.GET_DDL报错 error stack
  详细解决方案

请问DBMS_METADATA.GET_DDL报错 error stack

热度:103   发布时间:2016-04-24 08:26:02.0
请教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');
  相关解决方案