如何在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当前位置请再读一遍我的答案。
选择将生成必要的语句。将输出保存到文件中并运行该文件。