暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

将sql server过程迁移到oracle。

askTom 2017-08-16
240

问题描述

1.我们在sql server中有一个过程,其中包含许多临时表,现在我正在尝试将该过程转换为oracle过程。
所以我的问题是我应该使用临时表还是有其他可能性?

sql server示例代码:
Select ROW_NUMBER() over(order by WorkDate) id  , Id , WorkDate 
   into #TmpBlock1
   from TechWorkTime  (nolock)
   where WorkDate =@WorkDate and CompanyId=@CompanyId
        and TechId = ISNULL(@TechId,TechId) 
 
 select @MinId = min(id), @MaxId = max(id) from #TmpBlock1

 while (@MinId <= @MaxId)
 begin
  select 
   from #TmpBlock1 where id = @MinId
  
   
  insert into #TmpTechWorkTime3Blocks ()
  Select 
   from 
   where WorkDate = @WorkDatess 
   and CompanyId=@CompanyId
   and TechId = ISNULL(@Id,Id) 
   
  set @MinId = @MinId + 1
 end
复制

---> 请帮助我解决此问题

谢谢

专家解答

临时表在SQL Server中很常见,但在Oracle数据库中很少见。如果你经常使用它们,这通常是你做错了事的标志!

经常迁移时,您可以使用子查询分解/公共表表达式替换临时表。例如,您的前两个查询可能会变成:

with tmp_blk as (
  Select ROW_NUMBER() over(order by WorkDate) id , Id , WorkDate 
  from TechWorkTime 
  where WorkDate =:WorkDate and CompanyId=:CompanyId
  and TechId = nvl(:TechId,TechId) 
), mn_mx as (
 select min(id) minid, max(id) MaxId from tmp_blk
)
  select * from mn_mx;
复制


但是通常最好回到第一原则,了解代码在做什么,然后在Oracle中重新实现它。例如,在我看来,您正在将查询结果插入TmpTechWorkTime3Blocks。可以简化为:

insert into TmpTechWorkTime3Blocks 
  Select 
   from your_query
复制


但是如果你想要更多的帮助,你必须给我们更多的细节。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论