求助 这段 MS SQL 怎么转成 ORACLE SQL

a237428367 2015-05-26 03:11:35

DECLARE @CheckMsgnr INT=0
UPDATE M SET
M.MSGNR=CASE @CheckMsgnr WHEN 0 THEN M.MSGNR ELSE T.MSGNR END,
M.MatchActive=T.MatchActive,
M.MatchStatus=T.MatchStatus,
M.BetStatus=T.BetStatus,
M.MatchScore=T.MatchScore
FROM MATCHES M JOIN TMP_MATCHES T ON M.MatchID=T.MatchID
WHERE (@CheckMsgnr=0 OR (@CheckMsgnr=1 AND M.MSGNR<=T.MSGNR))


想了一下 不知道这样处理对不对

UPDATE MATCHES M
SET
(
M."MSGNR",
M."MatchActive",
M."MatchStatus",
M."BetStatus",
M."MatchScore",
M."UpdateTS"
)
=
(
SELECT
CASE P_CHECKMSGNR WHEN 0 THEN M."MSGNR" ELSE T."MSGNR" END ,
T."MATCH_ACTIVE",
T."MATCH_STATUS",
T."BET_STATUS",
T."SCORE",
P_NOW
FROM TEMP_UPDATEMATCHSTATUS T
WHERE
M."MatchID"=T."MATCHID"
AND (P_CHECKMSGNR=0 or (P_CHECKMSGNR=1 AND M."MSGNR"<T."MSGNR"))
);
...全文
252 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
VersonITGeek 2015-05-29
  • 打赏
  • 举报
回复
楼主,你的写法上有问题,更新的时候必须要加上where条件,否则不满足的条件的行需要修改的字段就会被设置成null,而且你的写法上也有问题,其实原来的MSSQL的写法隐含了三种情况,第一种情况就是P_CHECKMSGNR=0,第二种情况就是P_CHECKMSGNR=1 AND M."MSGNR"<T."MSGNR",而第三种情况才是else,你改写过的语句只包含了两种情况,相当于是你的逻辑除了问题
VersonITGeek 2015-05-29
  • 打赏
  • 举报
回复
DECLARE CheckMsgnr pls_integer := 0; begin if CheckMsgnr=0 then UPDATE MATCHES M SET (MSGNR,MatchActive,MatchStatus,BetStatus,MatchScore) = ( select case CheckMsgnr when 0 then M.MSGNR ELSE T.MSGNR END, T.MatchActive, T.MatchStatus, T.BetStatus, T.MatchScore where M.MatchID=T.MatchID ) where exists(select null from TMP_MATCHES T where M.MatchID=T.MatchID) elsif CheckMsgnr = 1 then UPDATE MATCHES M SET (MSGNR,MatchActive,MatchStatus,BetStatus,MatchScore) = ( select case CheckMsgnr when 0 then M.MSGNR ELSE T.MSGNR END, T.MatchActive, T.MatchStatus, T.BetStatus, T.MatchScore where M.MatchID=T.MatchID AND M.MSGNR<=T.MSGNR ) where exists(select null from TMP_MATCHES T where M.MatchID=T.MatchID AND M.MSGNR<=T.MSGNR) ELSE null; end if; end; /
a237428367 2015-05-29
  • 打赏
  • 举报
回复
上面那段 写错个地方 37行 应该是
T."MSGNR",
a237428367 2015-05-29
  • 打赏
  • 举报
回复


      IF  P_CHECKMSGNR=0 THEN
        UPDATE MATCHES M 
        SET 
          (
          M."MatchActive",
          M."MatchStatus",
          M."BetStatus",
          M."MatchScore",
          M."UpdateTS"
          )
          =
          (
            SELECT
              T."MATCH_ACTIVE",
              T."MATCH_STATUS",
              T."BET_STATUS",
              T."SCORE",
              P_NOW
            FROM TEMP_UPDATEMATCHSTATUS T
            WHERE
              M."MatchID"=T."MATCHID"
          );
      ELSE
        UPDATE MATCHES M 
        SET 
          (
          M."MSGNR",
          M."MatchActive",
          M."MatchStatus",
          M."BetStatus",
          M."MatchScore",
          M."UpdateTS"
          )
          =
          (
            SELECT
              M."MSGNR",
              T."MATCH_ACTIVE",
              T."MATCH_STATUS",
              T."BET_STATUS",
              T."SCORE",
              P_NOW
            FROM TEMP_UPDATEMATCHSTATUS T
            WHERE
              M."MatchID"=T."MATCHID"
              AND M."MSGNR"<T."MSGNR"
          );       
      END IF;

用了个if else 把 update 分成2句 实现了 TSQL 一句的效果 请教高手们有没有一句话搞定的啊?
a237428367 2015-05-28
  • 打赏
  • 举报
回复
求助啊!!!!!!!!!!!!!!!!!!!!!!

17,082

社区成员

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

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