You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从SQL Server调用无参数Oracle函数PK_DM_API_EDIT_ENTITY.DONE后数据未更新求助

问题排查与解决

核心原因:独立会话丢了包上下文

Oracle的PL/SQL包变量是会话级的——你在SQL Server里分三次用EXECUTE ... AT [MSD]调用,每次都会新建一个Oracle会话。前两次CHANGE和SET_VALUE设置的包状态,到第三次调用DONE的会话里就没了,自然不会执行更新。

还有个拼写错误

第三次调用里的包名写成了PK_MDM_API_EDIT_ENTITY.done,但你Oracle里实际是PK_DM_API_EDIT_ENTITY.DONE,多了个字母M,这会直接导致调用失败(要是没报错,大概率是SQL Server没捕获到Oracle的错误)。

正确调用方式

把三个操作塞进同一个PL/SQL块,一次发送给Oracle,保证在同一个会话里执行:

EXECUTE ( 'begin
    PK_DM_API_EDIT_ENTITY.CHANGE ( ?,? ); 
    PK_DM_API_EDIT_ENTITY.SET_VALUE ( ?,? ); 
    PK_DM_API_EDIT_ENTITY.DONE;
end; ', 'dep', '322', 'id_sub', '102') AT [MSD]

额外提醒

  • 确认SQL Server的链接服务器[MSD]事务配置正确,要是需要事务支持,得开启分布式事务。
  • 检查SQL Server有没有捕获到Oracle的错误,加个错误处理或者看链接服务器日志能帮你更快排查问题。

内容的提问来源于stack exchange,提问作者Kirik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:22:40