我有多张桌子。
我尝试了这个查询:
CREATE PUBLIC SYNONYM CHKWEBUSER FOR NEST.CHKWEBUSER;
但是我有多个像5000这样的表。那么如何在一个查询中创建同义词?
答案 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';