oracle 怎么给存储过程建立同义词

create synonym a1 FOR a2@testdb;

a1 是存储过程a2的同义词,并且a2在另一个数据库上,通过DBLINK连接,语法建好了,但是在JAVA中调用不管用,也不报错,a2有参数的
我说的问题是在这个同义词在那个数据库的原型是存储过程,在java调用时候能调用,但是用不了

一般操作是:
1.create or replace synonym a1 FOR a2@testdb;
2.grant connect to someuser  
grant dba to someuser  
grant resource to someuser 
3.grant all on 表 to someuser

这样存储过程就可操作同义词,在存储过程中访问公共同义词,必须直接对用户授权,而不能通过角色授权。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-05
一般操作是:
1.create or replace synonym a1
FOR
a2@testdb;
2.grant connect to someuser
grant dba to someuser
grant resource to someuser
3.grant all on
表 to someuser
这样存储过程就可操作同义词,在存储过程中访问公共同义词,必须直接对用户授权,而不能通过角色授权。
第2个回答  2011-11-28
这句话是没错的 你调用不报错说明执行了 但你再a用户下执行一个同义词执行了b用户下的一个存储过程对象 执行结果仍然在b中 你需要去查询b用户下的执行结果 所以你应该通过链路查询
b登陆
create or replace procedure test111 is
begin
insert into t values('1');
end;
换a登陆
create or replace synonym TEST111
for b.TEST111;
exec test111;
select * from b.t;
虽然不是链路 但是另一个用户道理是一样的
第3个回答  推荐于2017-09-13
create or replace procedure TESTCREATESYNONYM (
OBJNAME in varchar2, --指定的对象名
USERNAME in varchar2 default null) --对象所属Oracle用户,若传入null,则表示当前登录用户。
AUTHID CURRENT_USER
is
CNT integer;
VOBJNAME varchar2(100);
VUSERNAME varchar2(100);
CMD varchar2(100);
begin
VOBJNAME := upper(trim(OBJNAME));
VUSERNAME := USERNAME;
if USERNAME is null then
VUSERNAME := USER;
end if;
select count(*) into CNT from ALL_SYNONYMS
where OWNER = 'PUBLIC' and SYNONYM_NAME = VOBJNAME;
if CNT > 0 then
CMD := 'drop public synonym ' || VOBJNAME;
execute immediate CMD;
end if;
CMD := 'create public synonym ' || VOBJNAME || ' for ' || VUSERNAME || '.' || VOBJNAME;
execute immediate CMD;
end TESTCREATESYNONYM ;
----核心语句:create public synonym 'XXXXX' FOR AA.XXXXX
第4个回答  2019-08-05
函数创建不了同义词
表、视图、同义词、序列、存储过程、包可以
相似回答