如何在oracle中使用其同义词截断任何表?

时间:2015-03-24 08:51:36

标签: sql oracle truncate synonym

如何在oracle中使用其同义词截断任何表?

-- 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?.

3 个答案:

答案 0 :(得分:3)

截断语句不能用于同义词。

  

不能在drop table,drop view或truncate中使用同义词   表/集群语句。如果尝试这样做,则会产生ORA-00942:   表或视图不存在

例如,

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>

答案 1 :(得分:2)

您可以使用动态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;

如果通过数据库链接访问该表,则无效。在这种情况下,您可以在执行截断的远程实例上创建一个过程,然后通过数据库链接调用该过程,例如。

begin
  truncate_my_table@dblinkname;
end;

答案 2 :(得分:-1)

在Oracle中,您还可以在尝试使用同义词删除/截断表时获取ORA-14410。

警报日志:

ORA-00604:递归SQL级别1发生错误 ORA-14410:RPI LOCK TABLE发布到通过同义词

引用的表

按照上面的动态SQl删除/截断它。