设为首页 收藏本站
查看: 830|回复: 0

[经验分享] DB Oracle SqlServer 兼容问题(随项目持续更新3)

[复制链接]

尚未签到

发表于 2016-8-5 17:14:43 | 显示全部楼层 |阅读模式
  Oracle SqlServer  同时支持,挺费劲的,问题(日期与临时表兼容,Tree 型数据所有父节点,子节点处理
  1.    select
        count(*)
    from
        (select
            *
        from
            transaction_history
        union
        select
            *
        from
            transaction
    )  --无别名(Oracle)
where
    to_char(createdate,'yyyy-MM-dd')<='2012-01-06'
    and  to_char(createdate,'yyyy-MM-dd')>='2011-12-27' 
    and stockcode='000016'
  但是SqlServer 不行,必须对临时表别名
  select
        count(*)
    from
        (select
            *
        from
            transaction_history
        union
        select
            *
        from
            transaction
    )  _temp--有别名(SqlServer)
where
  convert(varchar(10), createdate, 20) <='2012-01-06'
    and  convert(varchar(10), createdate, 20) >='2011-12-27' 
    and stockcode='000016'
  2.SQL 获取所有父节点
  Sql_server fn:
  
CREATE FUNCTION f_getAllParent(@SID varchar(200))
RETURNS @t_Level TABLE(SID varchar(200),name varchar(100),Level int)
AS
BEGIN
    declare @name varchar(100) 
    DECLARE @Level int
    SET @Level=1
    select @name=name from SYS_UNIT where sid=@sid
    INSERT @t_Level SELECT @SID,@name,@Level
    WHILE @@ROWCOUNT>0
    BEGIN
        SET @Level=@Level+1
        INSERT @t_Level
    SELECT a.parentsid,a.name,@Level
    FROM SYS_UNIT a,@t_Level b
    WHERE a.sid=b.sid
     AND b.Level=@Level-1
    END
    RETURN
END
GO
  测试代码:
  select a.sid  from SYS_UNIT a , f_getAllParent('dc=com') b where a.sid = b.sid order by b.Level
  
  Oracle suppoet key word:
   SELECT SID FROM SYS_UNIT
   CONNECT BY PRIOR parentsid=sid  --(prior 后跟的是父节点,则以 START WITH SID='dc=com'
指定的特定子节点作为当前子节点往上遍历所有父节点)
 START WITH SID='dc=com'
  
  3.获取所有子节点:
  Sql_server fn:
  create function f_GetAllChild(@sid varchar(200))
returns @re table(sid varchar(200),name varchar(100),level int) 
as 
begin
  declare @name varchar(100) 
  declare @level int 
  set @level=1 
  select @name=name from SYS_UNIT where sid=@sid
  insert @re select @sid,@name,@level 
  while @@rowcount>0 
  begin 
  set @level=@level+1 
  insert @re select a.sid,a.name,@level 
  from SYS_UNIT a,@re b 
  where a.parentsid=b.sid and b.level=@level-1 
  end 
  return 
end
go
  select a.sid,b.level  from SYS_UNIT a , f_GetAllChildRole('dc=com') b where a.sid = b.sid order by b.Level
  
  Oracle suppoet key word:
  
   SELECT SID FROM SYS_UNIT
   CONNECT BY PRIOR sid=parentsid  --(prior 后跟的是子节点,则以 START WITH SID='dc=com'
指定的特定子节点作为当前根节点往下遍历所有子节点)
 START WITH SID='dc=com'
  
  Oracle注意区分Prior 后遍历的方向
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-253445-1-1.html 上篇帖子: oracle存储过程分页与返回多结果集 下篇帖子: 转载:Oracle表被锁定的处理办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表