【问题标题】:Migrating query with rownum from Oracle to MariaDB将带有 rownum 的查询从 Oracle 迁移到 MariaDB
【发布时间】:2018-01-13 03:42:45
【问题描述】:

我正在尝试将我的数据库从 oracle 迁移到 mariadb。

当我删除选择查询时,它执行得非常好,否则程序会显示错误。

SELECT MSFID, CONVEFEES INTO OUT_MSFID,OUT_CONVEFEES
    FROM
      (SELECT MSF.MSFID 
        (CASE WHEN MSF.CHARGETYPE = 'H' THEN 
                     (CASE WHEN (LV_METRNAMT*((IFNULL(FIXPER,0))/100)) > (IFNULL(FIXAMT,0))  THEN 
                           (LV_METRNAMT*((IFNULL(FIXPER,0))/100))
                       ELSE (IFNULL(FIXAMT,0) )END)
                  WHEN MSF.CHARGETYPE = 'L' THEN 
                      (CASE WHEN (LV_METRNAMT*((IFNULL(FIXPER,0))/100)) > (IFNULL(FIXAMT,0))  THEN 
                            (IFNULL(FIXAMT,0)) 
                        ELSE (LV_METRNAMT*((IFNULL(FIXPER,0))/100))
                        END)
                  ELSE
                    (LV_METRNAMT*((IFNULL(FIXPER,0))/100)) + (IFNULL(FIXAMT,0)) 
                END)

        -- (P_METRNAMT*((IFNULL(DMPER_OFFUS,0)*100)/100))+ (IFNULL(DMFIXAMT_OFFUS,0) * 100) 
        AS CONVEFEES
      FROM VTMEMSF MSF
      WHERE CURRENT_DATE() BETWEEN MSF.EFFFROM AND MSF.EFFTILL  AND MSF.SLABUPTO>= LV_METRNAMT AND STOREID=P_STOREID
        AND `MSF.STATUS` = 'A' AND MSF.MSFTYPE='C' -- AND MSF.TRANTYPE=P_TRNTYPE
        ORDER BY SLABUPTO)
     LIMIT 1;

【问题讨论】:

  • mysql中没有rownum可能需要limit 1。
  • 如果您有崩溃日志,请将其包含在问题中。以tour 获取更多信息。
  • @P.Salmon 是的,我使用了限制 1。但它仍然没有执行
  • sysdate 也不是 mysql。
  • @P.Salmon - MySQL 确实有 SYSDATE();它通常与CURRENT_DATE() 相同。

标签: mysql sql stored-procedures mariadb


【解决方案1】:
SELECT MSFID, CONVEFEES INTO OUT_MSFID,OUT_CONVEFEES
    FROM
      (SELECT MSF.MSFID 
        (CASE WHEN MSF.CHARGETYPE = 'H' THEN 
                     (CASE WHEN (LV_METRNAMT*((IFNULL(FIXPER,0))/100)) > (IFNULL(FIXAMT,0))  THEN 
                           (LV_METRNAMT*((IFNULL(FIXPER,0))/100))
                       ELSE (IFNULL(FIXAMT,0) )END)
                  WHEN MSF.CHARGETYPE = 'L' THEN 
                      (CASE WHEN (LV_METRNAMT*((IFNULL(FIXPER,0))/100)) > (IFNULL(FIXAMT,0))  THEN 
                            (IFNULL(FIXAMT,0)) 
                        ELSE (LV_METRNAMT*((IFNULL(FIXPER,0))/100))
                        END)
                  ELSE
                    (LV_METRNAMT*((IFNULL(FIXPER,0))/100)) + (IFNULL(FIXAMT,0)) 
                END)

        #-- (P_METRNAMT*((IFNULL(DMPER_OFFUS,0)*100)/100))+ (IFNULL(DMFIXAMT_OFFUS,0) * 100) 
        AS CONVEFEES
      FROM VTMEMSF MSF
      WHERE CURRENT_DATE() BETWEEN MSF.EFFFROM AND MSF.EFFTILL  AND MSF.SLABUPTO>= LV_METRNAMT AND STOREID=P_STOREID
        AND `MSF.STATUS` = 'A' AND MSF.MSFTYPE='C' #-- AND MSF.TRANTYPE=P_TRNTYPE
        ORDER BY SLABUPTO) s
     LIMIT 1;

【讨论】:

    猜你喜欢
    • 2022-10-19
    • 1970-01-01
    • 2019-10-16
    • 2013-10-02
    • 1970-01-01
    • 2021-11-14
    • 2011-11-25
    • 2020-10-19
    • 2014-01-26
    相关资源
    最近更新 更多