又遇到奇怪的问题,进来看看

gelyon 2011-03-30 09:58:10

--下面是我的一个过程(省略其它部分):
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中都没有报错啊,很是纳闷中。。。。

--各位看看是神马原因呢???
...全文
176 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vber1010 2011-04-27
  • 打赏
  • 举报
回复
楼主先排除一下是不是授权的问题:加上authid current_user
不留痕迹 2011-04-27
  • 打赏
  • 举报
回复
我觉得应该是转换的事 我也遇到了这个问题 把同义词的对象所有者改一下就可以了
lixinbill 2011-04-27
  • 打赏
  • 举报
回复
关注
yurui05 2011-04-20
  • 打赏
  • 举报
回复
没有仔细看问题。扫描了下,又看了楼上兄弟的猜测。感觉是存储过程的显示授权问题。
以前遇过存储过程授权的错误。
http://hi.baidu.com/loveyurui/blog/item/9f4837d31fa529369a50272f.html
hebo2005 2011-04-20
  • 打赏
  • 举报
回复
可能和存储过程的显示授权有关系吧
gelyon 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hanks_gao 的回复:]
樓主第二個問題可能跟字符集有關係!
[/Quote]
不是,跟字符集没关系的,因为我几个服务器的和客户端的都是一样的字符集
hanks_gao 2011-03-31
  • 打赏
  • 举报
回复
樓主第二個問題可能跟字符集有關係!
minitoy 2011-03-30
  • 打赏
  • 举报
回复
奇怪的不得了
iqlife 2011-03-30
  • 打赏
  • 举报
回复
1:感觉的数据库TNS改变过
2:
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';

语法有警告,语法对了

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧