sql不能直接在数据库里面修改 必须通过框架工具

解决方案 »

  1.   

    SELECT F.FILENAME
    FROM IB_NRT_FILELIST F
    WHERE N.NRT_FILE_ID = F.FILE_ID(+)
    既然只取F的数据没必要用外连接,可以把(+)去掉,你说的框架工具是啥,不能修改sql ?
      

  2.   

    这个不是 外联的问题 我去掉了 还是不行 现在的问题是 我通过框架保存sql到数据库的时候 sql里面的THEN和ELSE后面的括号不能有,否则不能保存
    有没有其他的写法
      

  3.   

    DECODE(:GUI_FILE_SOURCE,0,(SELECT F.FILENAME
                 FROM IB_NRT_FILELIST F
                WHERE N.NRT_FILE_ID = F.FILE_ID))
    括号还是有,只是没有THEN和ELSE
      

  4.   

    将CASE WHEN 换成DECODE试试呢,我不知道你的框架能不能解析decode里的括号
      

  5.   

    将CASE WHEN 换成DECODE试试呢,我不知道你的框架能不能解析decode里的括号
    试了 不可以 decode后面的括号框架解析不过去,蛋疼的框架。
      

  6.   

    将CASE WHEN 换成DECODE试试呢,我不知道你的框架能不能解析decode里的括号
    试了 不可以 decode后面的括号框架解析不过去,蛋疼的框架。
    难道你的框架括号都不能解析,如果是这样,你就得从你框架想办法了
      

  7.   

    From后面的括号可以解析么,可以试试SELECT APN_NI,
           START_TIME_UTC_OFFSET,
           CASE :GUI_FILE_SOURCE WHEN 0 THEN FILENAME ELSE FILE_NAME END FILENAME
     FROM (
    SELECT N.APN_NI,
           N.START_TIME_UTC_OFFSET,
           F.FILENAME,
           M.FILE_NAME
           CASE
             WHEN 0 = :GUI_FILE_SOURCE THEN
              (SELECT F.FILENAME
                 FROM IB_NRT_FILELIST F
                WHERE N.NRT_FILE_ID = F.FILE_ID(+))
             ELSE
              (SELECT M.FILE_NAME
                 FROM IB_FMS_FILELIST M
                WHERE N.FILE_ID = M.FILE_ID(+))
           END AS FILENAME
      FROM &CDR_TABLE& N,
           IB_EVENT_STATE     S,
           IB_ERR_TYPE        ET,
           IB_PARTNER         P,
           IB_NRT_FILELIST    F,
           IB_FMS_FILELIST    M
     WHERE 1 = 1
       AND N.ERR_TYPE_ID = ET.ERR_TYPE_ID(+)
       AND N.STATE = S.STATE(+)
       AND N.PARTNER_ID = P.PARTNER_ID(+)
       AND N.NRT_FILE_ID = F.FILE_ID(+)
       AND N.FILE_ID = M.FILE_ID(+));虽然丑了一点。
      

  8.   

    SELECT APN_NI,
           START_TIME_UTC_OFFSET,
           CASE :GUI_FILE_SOURCE WHEN 0 THEN FILENAME ELSE FILE_NAME END FILENAME
     FROM (
    SELECT N.APN_NI,
           N.START_TIME_UTC_OFFSET,
           F.FILENAME,
           M.FILE_NAME
          /* CASE
             WHEN 0 = :GUI_FILE_SOURCE THEN
              (SELECT F.FILENAME
                 FROM IB_NRT_FILELIST F
                WHERE N.NRT_FILE_ID = F.FILE_ID(+))
             ELSE
              (SELECT M.FILE_NAME
                 FROM IB_FMS_FILELIST M
                WHERE N.FILE_ID = M.FILE_ID(+))
           END AS FILENAME */
      FROM &CDR_TABLE& N,
           IB_EVENT_STATE     S,
           IB_ERR_TYPE        ET,
           IB_PARTNER         P,
           IB_NRT_FILELIST    F,
           IB_FMS_FILELIST    M
     WHERE 1 = 1
       AND N.ERR_TYPE_ID = ET.ERR_TYPE_ID(+)
       AND N.STATE = S.STATE(+)
       AND N.PARTNER_ID = P.PARTNER_ID(+)
       AND N.NRT_FILE_ID = F.FILE_ID(+)
       AND N.FILE_ID = M.FILE_ID(+));