如何使用 oracle 中的同义词截断任何 table?
How to truncate any table using its synonym in oracle?
如何使用 oracle 中的同义词截断任何 table?
-- in Server_A
Create Table table_a ( col int);
-- in server_B
CREATE SYNONYM syn_table_a FOR table_a@dblink_server_a;
--insert into
INSERT INTO syn_table_a values (1);
--Truncate
How to truncate table using synonym only?.
截断语句不能用于同义词。
Synonyms cannot be used in a drop table, drop view or truncate
table/cluster statements. If this is tried, it results in a ORA-00942:
table or view does not exist
例如,
SQL> CREATE TABLE t(col NUMBER);
Table created.
SQL>
SQL> CREATE SYNONYM t_syn FOR t;
Synonym created.
SQL>
SQL> TRUNCATE TABLE t_syn;
TRUNCATE TABLE t_syn
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL>
您可以使用动态 SQL 来实现,例如:
declare
d varchar2(1000);
begin
select 'TRUNCATE TABLE "' || table_owner || '"."' || table_name || '"'
into d
from all_synonyms
where synonym_name = 'MYSYNONYM';
execute immediate d;
end;
如果 table 是通过数据库 link 访问的,这将不起作用。在这种情况下,您可以在执行截断的远程实例上创建一个过程,然后跨数据库调用该过程 link,例如
begin
truncate_my_table@dblinkname;
end;
在 Oracle 中,您还可以在尝试使用同义词 drop/truncate table 时得到 ORA-14410。
警报日志:
ORA-00604: 递归 SQL 级别 1 发生错误
ORA-14410: RPI 锁 TABLE 颁发给通过同义词
引用的 table
按照上面的动态SQl到drop/truncate吧。
如何使用 oracle 中的同义词截断任何 table?
-- in Server_A
Create Table table_a ( col int);
-- in server_B
CREATE SYNONYM syn_table_a FOR table_a@dblink_server_a;
--insert into
INSERT INTO syn_table_a values (1);
--Truncate
How to truncate table using synonym only?.
截断语句不能用于同义词。
Synonyms cannot be used in a drop table, drop view or truncate table/cluster statements. If this is tried, it results in a ORA-00942: table or view does not exist
例如,
SQL> CREATE TABLE t(col NUMBER);
Table created.
SQL>
SQL> CREATE SYNONYM t_syn FOR t;
Synonym created.
SQL>
SQL> TRUNCATE TABLE t_syn;
TRUNCATE TABLE t_syn
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL>
您可以使用动态 SQL 来实现,例如:
declare
d varchar2(1000);
begin
select 'TRUNCATE TABLE "' || table_owner || '"."' || table_name || '"'
into d
from all_synonyms
where synonym_name = 'MYSYNONYM';
execute immediate d;
end;
如果 table 是通过数据库 link 访问的,这将不起作用。在这种情况下,您可以在执行截断的远程实例上创建一个过程,然后跨数据库调用该过程 link,例如
begin
truncate_my_table@dblinkname;
end;
在 Oracle 中,您还可以在尝试使用同义词 drop/truncate table 时得到 ORA-14410。
警报日志:
ORA-00604: 递归 SQL 级别 1 发生错误 ORA-14410: RPI 锁 TABLE 颁发给通过同义词
引用的 table按照上面的动态SQl到drop/truncate吧。