日期:2014-05-16  浏览次数:21512 次

oracle dblink 表或视图不存在
本帖最后由 wjhlangzi 于 2011-09-01 12:23:12 编辑
请教下各位,如下使用dblink的问题,创建dblink是正确的,测试也没问题,
只是执行sql语句放到 oracle的 触发器中就提示 表或视图不存在。


--创建db link链接
-- create database link test connect to"wzx" identified by "123456" using 'orcl'; 
--测试语句如下
select * from test_user@test;
insert into test_user@test(id,name)values(1,'test');
--以上两个语句是正确的。 说明dblink 是成功的。
但是如果我把
-- insert into test_user@test(id,name)values(1,'test'); 放到触发器的 begin … end 中。就提示表或视图不存在。

在创建快照的时候也是如此:
Create snapshot sn_xwmc as select * from xwmc@test;  
提示找不到表或视图。
单独执行  select * from xwmc@test;  是可以执行的。
请问下大家该怎么解决呢?
------解决方案--------------------
权限问题,grant select, insert, update on tabname to username with grant option;
------解决方案--------------------
尝试

create view v_test_user as select * from test_user@test;
insert into v_test (id,name)values(1,'test');
看看是否成功,同时观察报错情况
------解决方案--------------------
这么写是没什么问题的,重新登录再触发触发器试试,再不行就把test_user表的grant语句贴出来
------解决方案--------------------
引用:
查看下是否带有用户(表所有者)或者你DBLINK的用户权限


比如select * from lee.XX@dblk_a
或者
你创建DBLINK的用户为XIA  那么查看此表用户是否GRANT SELECT ON XX  TO XIA

再者查看错误如果远程表包含BLOB字段的话 那么也会抱错 
------解决方案--------------------
你触发器的用户是哪个。。。也要授权