• oracle中的常用函数


    decode有点类似java中的switch case. 只能针对具体的值(往往是一些类型字段的值)做判断.不针对condition做判断.

    一个计算是否投放(isok)的例子.
    
    DECODE (
    
                   b.istime,
    
                   1,
    
                   DECODE (  a.如果处于投放时间
    
                      b.isremain,
    
                      1,
    
                      DECODE (    b.如果帐户还有钱
    
                         a.check_status,
    
                         1,
    
                         DECODE (  c.如果广告的状态是已审核通过
    
                            a.ispause,
    
                            0,      
    
                            DECODE (a.isoptimize,   d.如果广告未暂停
    
                                    0,
    
                DECODE (           e.如果广告未优化
    
                   b.place,
    
                   3,                   f.如果达到日限额.
    
                                       0,                   返回0
    
                                       1                    否则返回1
    
                                       ), 
    
                                    0    e/否则为0
    
                ),
    
                            0    d/否则为0
    
                         ),
    
                         0  c/否则为0 
    
                      ),
    
                      0  b/否则为0
    
                   ),
    
                   0  a/否则返回0
    
                )
    
                   AS isok,
    

    又比如通过decode临时调整一些值的大小.比如type=6的搬家由于数据量较大,会影响到其它类型的上线.通过decode设置一些临时的值将type=6的类型放到了最后处理.

    /* Formatted on 2011-8-3 16:02:55 (QP5 v5.114.809.3010) */
    SELECT   *
      FROM   (  SELECT   p.ID,
                         p.AGENTID,
                         p.TYPE,
                         p.GRPID,
                         p.STEP,
                         p.ACCOUNTID,
                         a1.C_INDUSTRY AS INDUSID,
                         a1.C_COMPANY_NAME AS ACCOUNTNAME,
                         a2.C_COMPANY_NAME AS AGENTNAME,
                         a1.C_EMAIL AS ACCOUNTEMAIL
                  FROM   (SELECT   grpid, minid, ntype
                            FROM   (  SELECT   o.grpid,
                                               MIN (o.id) AS minid,
                                               DECODE (o.TYPE,
                                                       6, 16,
                                                       2, 1,
                                                       3, 1,
                                                       o.TYPE)
                                                  AS ntype
                                        FROM   cpc.cpcoperation o,
                                               cpc.account ac,
                                               cpc.bill bi
                                       WHERE   o.step = 0
                                               AND o.TYPE IN
                                                        (1,
                                                         2,
                                                         3,
                                                         4,
                                                         5,
                                                         6,
                                                         7,
                                                         8,
                                                         9,
                                                         10)
                                               AND o.accountid = ac.i_account_id
                                               AND o.accountid = bi.i_account_id
                                               AND ac.C_STATUS IN ('正常', '转换')
                                               AND O.CREATEDATE <=
                                                     SYSDATE - 0.03 / 24
                                               AND bi.I_REMAIN > 0
                                    --AND MOD(o.grpid, 5) = {?}
                                    GROUP BY   o.grpid,
                                               DECODE (o.TYPE,
                                                       6, 16,
                                                       2, 1,
                                                       3, 1,
                                                       o.TYPE)
                                    ORDER BY   DECODE (o.TYPE,
                                                       6, 16,
                                                       2, 1,
                                                       3, 1,
                                                       o.TYPE),
                                               MIN (o.id))
                           WHERE   ROWNUM <= 60) op,
                         (SELECT   o.*,
                                   DECODE (o.TYPE, 6, 16, 2, 1, 3, 1, o.TYPE)
                                      AS ntype
                            FROM   cpc.cpcoperation o
                           WHERE   o.step = 0
                                   AND o.TYPE IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) p,
                         CPC.ACCOUNT a1,
                         CPC.ACCOUNT a2
                 WHERE       op.grpid = p.grpid
                         AND op.ntype = p.ntype(+)
                         AND p.accountid = a1.i_account_id(+)
                         AND a1.i_agent_id = a2.i_account_id(+)
                         AND p.id IS NOT NULL
                         AND p.id = op.minid
                         AND (a1.C_STATUS = '正常' OR a1.C_STATUS = '转换')
              ORDER BY   op.ntype, op.minid, op.grpid)
     WHERE   ROWNUM <= 200
    


    min,max函数的参数只有一个,一般是个列
    greatest,leaest的参数可以是多个,比大小用这个.

  • 相关阅读:
    高并发下缓存失效问题及解决方案
    行为型设计模式
    Redisson
    行为型设计模式
    Docker 安装 Elasticsearch 和 Kibana
    行为型设计模式
    C# 使用 WebBrowser 实现 HTML 转图片功能
    .NET 程序下锐浪报表 (Grid++ Report) 的绿色发布指南
    .NET 程序员的 Playground :LINQPad
    Windows 服务器上的 WordPress 站点优化笔记
  • 原文地址:https://www.cnblogs.com/highriver/p/2126268.html
Copyright © 2020-2023  润新知