如何在oracle 10g中创建多个表同义词?

时间:2014-08-29 06:57:56

标签: oracle

我有多张桌子。

我尝试了这个查询:

CREATE PUBLIC SYNONYM CHKWEBUSER FOR NEST.CHKWEBUSER;

但是我有多个像5000这样的表。那么如何在一个查询中创建同义词?

2 个答案:

答案 0 :(得分:1)

您不能简单地使用单个命令为所有表创建同义词。你需要做的是创建/生成一个脚本,为你做到这一点。

在这里,您有一个简单的脚本,它将生成一个CREATE PUBLIC SYNONYM...命令列表,您可以在以后运行这些命令。

DECLARE

  CURSOR cTables IS
    SELECT * 
      FROM ALL_TABLES TAB
    WHERE TAB.OWNER = 'NEST'; /* Tune the where clause to your needs */

  sSql VARCHAR2(20000);

BEGIN

  FOR rTable in cTables LOOP

    sSql := 'CREATE PUBLIC SYNONYM ' || rTable.TABLE_NAME || ' FOR NEST.' || rTable.TABLE_NAME || ';';
    DBMS_OUTPUT.PUT_LINE(sSql);

  END LOOP;

END;

此脚本将打印出如下命令:

CREATE PUBLIC SYNONYM MY_TABLE FOR NEST.MY_TABLE

此外,您可以直接致电:

,而不是使用DBMS_OUTPUT.PUT_LINE
EXECUTE IMMEDIATE sSql;

代替。这将自动为您创建同义词。

答案 1 :(得分:0)

以下语句将生成必要的语句。

您需要将该语句的输出假脱机/导出到SQL脚本中,然后运行该脚本。

如何执行此操作完全取决于您使用的SQL客户端。使用SQL * Plus,您可以使用使用spool命令。

select 'create public synonym '||table_name||' for '||owner||'.'||table_name||';'
from all_tables
where owner = 'NEST';