【问题标题】:Oracle Error while reading from DBMS_METADATA从 DBMS_METADATA 读取时出现 Oracle 错误
【发布时间】:2015-11-18 20:38:52
【问题描述】:

我是在 Oracle 中编写存储过程的新手。我想将物化视图日志的创建脚本保存到临时表中。删除那些物化视图日志,然后使用存储在临时表中的脚本重新创建它们,然后也删除该表。 这是我目前所拥有的,还有很长的路要走。

create or replace PROCEDURE procPrintOutput
IS
  l_stmt VARCHAR2(512) := '';
  --create_table_stmt VARCHAR2(512) := 'create global temporary table temp(matViewLogQuery VARCHAR2(4000))';
  select_stmt VARCHAR2(512) := 'SELECT * from temp';
BEGIN
    DBMS_OUTPUT.PUT_LINE('1');
    DECLARE
    CURSOR LIST_OF_MVL IS SELECT * FROM USER_BASE_TABLE_MVIEWS;
        BEGIN
            DBMS_OUTPUT.PUT_LINE('2');
            FOR TEST IN LIST_OF_MVL 
          LOOP
            BEGIN
              DBMS_OUTPUT.PUT_LINE('owner : ' || TEST.OWNER || ' - name : ' || TEST.MASTER);
              l_stmt := 'insert into temp SELECT SYS.DBMS_METADATA.get_dependent_ddl (''MATERIALIZED_VIEW_LOG'', ''|| TEST.MASTER||'', ''|| TEST.OWNER ||'') from dual';
              EXECUTE IMMEDIATE (l_stmt);
            END;
          END LOOP;
        END;
  DBMS_OUTPUT.PUT_LINE('Done!');

END;

我在运行时遇到的错误是

ORA-31608: specified object of type MATERIALIZED_VIEW_LOG not found
ORA-06512: at "SYS.DBMS_METADATA", line 5088
ORA-06512: at "SYS.DBMS_METADATA", line 7681
ORA-06512: at line 1
ORA-06512: at "XXX.PROCPRINTOUTPUT", line 25
ORA-06512: at line 2

有什么想法吗?

【问题讨论】:

    标签: stored-procedures oracle11g oracle-sqldeveloper


    【解决方案1】:

    问题在于转义。这就是它的修复方式:

    l_stmt := 'insert into temp SELECT SYS.DBMS_METADATA.get_dependent_ddl (''MATERIALIZED_VIEW_LOG'', '''||TEST.MASTER||''', '''||TEST.OWNER||''') from dual';
    

    谢谢

    【讨论】:

      猜你喜欢
      • 2021-09-05
      • 1970-01-01
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 2020-08-14
      相关资源
      最近更新 更多