Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在oracle 10g中创建多个表同义词?_Oracle - Fatal编程技术网

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

如何在oracle 10g中创建多个表同义词?,oracle,Oracle,我有多张桌子 我试图回答这个问题: CREATE PUBLIC SYNONYM CHKWEBUSER FOR NEST.CHKWEBUSER; 但我有多张桌子,比如5000张。那么如何在一个查询中创建同义词呢?下面的语句将生成必要的语句 您需要将该语句的输出假脱机/导出到SQL脚本中,然后运行该脚本 如何做到这一点完全取决于您使用的SQL客户机。使用SQL*Plus,您可以使用spool命令 select 'create public synonym '||table_name||' for

我有多张桌子

我试图回答这个问题:

CREATE PUBLIC SYNONYM CHKWEBUSER FOR NEST.CHKWEBUSER;

但我有多张桌子,比如5000张。那么如何在一个查询中创建同义词呢?

下面的语句将生成必要的语句

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

如何做到这一点完全取决于您使用的SQL客户机。使用SQL*Plus,您可以使用
spool
命令

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

不能简单地用一个命令为所有表创建同义词。您需要做的是创建/生成一个脚本来为您完成这项工作

在这里,您有一个简单的脚本,它将生成一个
创建公共同义词…
命令列表,您可以稍后运行这些命令

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\u OUTPUT.PUT\u LINE
您可以直接调用:

EXECUTE IMMEDIATE sSql;

相反。这将自动为您创建同义词。

不确定我是否遵循正确的。。。是否要为特定架构中的每个表创建同义词,还是其他内容?我要为所有表创建同义词table@Black当前位置请再读一遍我的答案。
选择将生成必要的语句。将输出保存到文件中并运行该文件。