17,078
社区成员
发帖
与我相关
我的任务
分享
--下面是我的一个过程(省略其它部分):
create or replace procedure pxd000paoo1(
.....
.....
--问题1:設定材料名稱
update wxd000paoo1 A set
mtnm=pxd000haa01.getspec(A.hmat) --调用另一个schema下的包的函数
where co=p_co and txemp=p_txemp;
--问题2:設定跳頁部門名稱
update wxd000paoo1 A set
jmpgdpnm=(wrk_orgnlvdpnmone||':'||A.dtlvdp||' '||(select distinct orgnlvdpnmone from wxd000paaa1 where co =A.co and dtlvdp=A.dtlvdp ))
where co=p_co and txemp=p_txemp;
.....
.....
end;
--备注:问题1和问题2都是我在编译我的过程时候报错的。
--问题1报错信息:同义词转换不再有效。
-- 从字面意思来看,是pxd000haa01包同义词失效,但是我想说的是此包已经对我授权并且我也已经创建synonym
-- 我以同一个用户单独开另一个窗口,单独执行sql1能成功,即:
-- update wxd000paoo1 A set
-- mtnm=pxd000haa01.getspec(A.hmat) --调用另一个schema下的包的函数
-- where co='1' and txemp='PPOWER';
-- 和执行 select pxd000haa01.getspec('123') from dual;
-- 都能成功!
-- 由此可说明,我的同义词pxd000haa01并没有失效,也有权限啊!
-- 并且,我在另外的一个server上执行我的过程,同样的写法却没有报此错,即成功执行我的pxd000paoo1。
-- 此问题我已经解决,
-- 我的解决办法,重新drop synonym pxd000haa01,再重新创建一次create synonym pxd000haa01 for ...
-- 但是不是很明白原因,为什么会这样??
--问题2报错信息:PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
-- 从字面意思来看,说是此写法不对
-- 我以同一个用户单独开一个窗口,单独执行sql2能成功,即:
-- update wxd000paoo1 A set
-- jmpgdpnm=('厂处'||':'||A.dtlvdp||' '||(select distinct orgnlvdpnmone from wxd000paaa1 where co =A.co and dtlvdp=A.dtlvdp ))
-- where co='1' and txemp='PPOWER';
-- 由此可说明,我的写法是对的啊
-- 并且,我在另外的一个server上执行我的过程,同样的写法却没有报此错,即成功执行我的pxd000paoo1。
-- 此问题我换了种写法未报错,即:我采用动态sql写法来做的:
-- execute immediate 'update wxd000paoo1 A set ...' using wrk_orgnlvdpnmone,p_co,p_txemp
-- 我现在不想换成动态sql,因为并不是问题原因的根本
-- 我同样的写法(即原写法)在另外的DB中都没有报错啊,很是纳闷中。。。。
--各位看看是神马原因呢???