【问题标题】:How to flip Oracle Synonyms between tables如何在表之间翻转 Oracle 同义词
【发布时间】:2018-12-31 22:11:48
【问题描述】:

我有以下两张表。

A_DETAILS

B_DETAILS

我在上面的表格上创建了​​以下两个同义词

A_DETAILS 指向 --> L_DETAILS

B_DETAILS 指向 --> R_DETAILS

我想在某个时间点翻转同义词,例如

A_DETAILS 指向 --> R_DETAILS

B_DETAILS 指向 --> L_DETAILS

我尝试了下面的代码,但它创建了单个表的同义词并从另一个表中删除。

BEGIN

   FOR reg IN 
(SELECT SYNONYM_NAME, TABLE_NAME, OWNER
            FROM ALL_SYNONYMS
           WHERE OWNER IN ('MY_SCHEMA') AND SUBSTR (TABLE_NAME, 1, 2) = 'A_')
   LOOP
      v_Statement := 'CREATE OR REPLACE SYNONYM '|| reg.owner|| '.'|| reg.SYNONYM_NAME|| ' FOR '|| reg.owner|| '.'|| 'B_'|| SUBSTR (reg.TABLE_NAME, 3);

      EXECUTE IMMEDIATE v_Statement;
   END LOOP;
      FOR reg
      IN (SELECT SYNONYM_NAME, TABLE_NAME, OWNER
            FROM ALL_SYNONYMS
           WHERE OWNER IN ('MY_SCHEMA') AND SUBSTR (TABLE_NAME, 1, 2) = 'B_')
   LOOP
      v_Statement :='CREATE OR REPLACE SYNONYM '|| reg.owner|| '.'|| reg.SYNONYM_NAME|| ' FOR '|| reg.owner|| '.'|| 'A_'|| SUBSTR (reg.TABLE_NAME, 3);

      EXECUTE IMMEDIATE v_Statement;
   END LOOP;
   END;

【问题讨论】:

    标签: sql oracle stored-procedures synonym


    【解决方案1】:

    一个循环而不是两个循环。当您进入第二个循环时,第一个同义词已更新为指向 B_,因此第二个循环正在更新两个同义词以指向 A_。

    BEGIN
      FOR reg IN (
        SELECT SYNONYM_NAME, TABLE_NAME, OWNER
             , case SUBSTR (TABLE_NAME, 1, 2)
                 when 'A_' then 'B_'
                 when 'B_' then 'A_'
               end || SUBSTR (TABLE_NAME, 3) NEW_TABLE
          FROM ALL_SYNONYMS
         WHERE OWNER IN ('MY_SCHEMA') AND SUBSTR (TABLE_NAME, 1, 2) in ('A_','B_'))
      LOOP
        v_Statement := 'CREATE OR REPLACE SYNONYM '|| reg.owner|| '.'|| reg.SYNONYM_NAME
                    || ' FOR '|| reg.owner|| '.'|| reg.NEW_TABLE;
    
        EXECUTE IMMEDIATE v_Statement;
      END LOOP;
    END;
    

    【讨论】:

    • 谢谢,@Sentinel 它在一个循环中工作。你是对的关于 2 个循环,这就是原因。
    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 2011-10-06
    • 2021-09-17
    相关资源
    最近更新 更多