第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
函数创建不了同义词
表、视图、同义词、序列、存储过程、包可以