2015-10-01 24 views
0

我試圖在XML文件中的bean中存儲以下sql。我試圖擺脫大於和小於跡象,但我似乎仍然在Eclipse中出現錯誤。我不知道如何正確地逃避這些跡象。我計算出六個小於和大於符號,我試圖逃脫。如何在XML文件中爲此SQL轉義<>

這裏是我的嘗試:

<property name="SQL" value="&lt;&gt;&lt;&gt;&lt;&gt;&lt;&gt;&lt;&gt;&lt;&gt;" 
"SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') SQL_RUN_DT 
    ,'STG_DISB_HOLD_TH' SRC_TBL 
    ,A1.DISB_DT 
    ,A1.CPC 
    ,A1.AWARD_YR 
    ,COUNT(1) ROW_CNT 
    ,SUM(A1.APPL_NBR) APPL_NBR_SUM 
    ,SUM(A1.TSYS_SCHL_ID) TSYS_SCHL_ID_SUM 
    ,SUM(TO_NUMBER(A1.DISB_NBR)) DISB_NBR_SUM 
    ,SUM(A1.DISB_SEQ_NBR) DISB_SEQ_NBR_SUM  
    ,SUM(CASE WHEN A1.DISB_STAT_CD = 'R' AND A1.DISB_SEQ_NBR = 1 THEN 1 
      ELSE A1.INTNL_APPL_SEQ_NBR + 1 
      END) INTERNAL_DISB_SEQ_SUM 
    ,MIN(A1.DISB_RCVD_DT) DISB_RCVD_DT_MIN 
    ,MAX(A1.DISB_RCVD_DT) DISB_RCVD_DT_MAX 
    ,SUM(CASE WHEN A1.DISB_STAT_CD = 'P' THEN 1 ELSE 0 END) DISB_STAT_CD_P 
    ,SUM(CASE WHEN A1.DISB_STAT_CD = 'R' THEN 1 ELSE 0 END) DISB_STAT_CD_R 
    ,MIN(A1.PYMT_START_DT) PYMT_START_DT_MIN 
    ,MAX(A1.PYMT_START_DT) PYMT_START_DT_MAX 
    ,COUNT(DISTINCT A1.SCHL_ENROLL_CD) SCHL_ENROLL_CD_CNT 
    ,SUM(TO_NUMBER(A1.NET_TRANS_CD)) NET_TRANS_CD_SUM 
    ,SUM(A1.NET_TRANS_AMT) NET_TRANS_AMT_SUM 
    ,SUM(CASE WHEN A1.DISB_STAT_CD = 'R' AND A1.DISB_SEQ_NBR = 1 AND A1.NET_C_OR_D_IND = 'D' THEN A1.NET_TRANS_AMT + A1.NET_TRANS_AMT 
      WHEN A1.DISB_STAT_CD = 'R' AND A1.DISB_SEQ_NBR = 1 AND A1.NET_C_OR_D_IND <> 'D' THEN A1.NET_TRANS_AMT - A1.NET_TRANS_AMT 
      WHEN (A1.DISB_STAT_CD <> 'R' OR A1.DISB_SEQ_NBR <> 1) AND A1.NET_C_OR_D_IND = 'D' THEN A1.SUM_NET_AMT + A1.NET_TRANS_AMT 
      WHEN (A1.DISB_STAT_CD <> 'R' OR A1.DISB_SEQ_NBR <> 1) AND A1.NET_C_OR_D_IND <> 'D' THEN A1.SUM_NET_AMT - A1.NET_TRANS_AMT 
      ELSE 0 
      END) SUM_NET_AMT_SUM 
    ,SUM(CASE WHEN A1.ENRL_STATUS_CD = 'F' THEN 1 ELSE 0 END) ENRL_STATUS_CD_F 
    ,SUM(CASE WHEN A1.ENRL_STATUS_CD = 'Q' THEN 1 ELSE 0 END) ENRL_STATUS_CD_Q 
    ,SUM(CASE WHEN A1.ENRL_STATUS_CD = 'H' THEN 1 ELSE 0 END) ENRL_STATUS_CD_H 
    ,SUM(CASE WHEN A1.ENRL_STATUS_CD = 'L' THEN 1 ELSE 0 END) ENRL_STATUS_CD_L 
    ,SUM(CASE WHEN A1.ENRL_STATUS_CD IS NULL THEN 1 ELSE 0 END) ENRL_STATUS_CD_NULL 
    ,COUNT(DISTINCT A1.PGM_CIP_CD) PGM_CIP_CD_CNT 
    ,COUNT(DISTINCT A1.LEGACY_USER_ID) LEGACY_USER_ID_CNT 
    ,COUNT(DISTINCT A1.MAINT_APP) MAINT_APP_CNT 
    ,MIN(A1.MAINT_DTM) MAINT_DTM_MIN 
    ,MAX(A1.MAINT_DTM) MAINT_DTM_MAX 
    ,COUNT(DISTINCT A1.MAINT_USERID) MAINT_USERID_CNT 
FROM 
(
SELECT LM.TEACH_MASTER_ID 
    ,SAM.APPL_NBR 
    ,TO_NUMBER(SAM.AWARD_YR) AWARD_YR 
    ,SAM.TSYS_SCHL_ID 
    ,SAM.AWARD_NBR 
    ,SAM.DISB_NBR 
    ,SAM.DISB_SEQ_NBR 
    ,SAM.CPC 
    ,SAM.DISB_DT 
    ,SAM.DISB_RCVD_DT 
    ,SAM.DISB_STAT_CD 
    ,SAM.PYMT_START_DT 
    ,SAM.SCHL_ENROLL_CD 
    ,SAM.NET_TRANS_CD 
    ,CASE WHEN SAM.NET_C_OR_D_IND = 'C' THEN SAM.NET_TRANS_AMT * -1 
     WHEN SAM.NET_C_OR_D_IND IS NULL THEN 0 
     ELSE SAM.NET_TRANS_AMT 
     END NET_TRANS_AMT 
    ,CASE WHEN SAM.NET_C_OR_D_IND = 'C' THEN SAM.GROSS_TRANS_AMT * -1 
     WHEN SAM.NET_C_OR_D_IND IS NULL THEN 0 
     ELSE SAM.GROSS_TRANS_AMT 
     END GROSS_TRANS_AMT 
    ,CASE WHEN SAM.NET_C_OR_D_IND = 'C' THEN SAM.FEE_TRANS_AMT * -1 
     WHEN SAM.NET_C_OR_D_IND IS NULL THEN 0 
     ELSE SAM.FEE_TRANS_AMT 
     END FEE_TRANS_AMT 
    ,CASE WHEN SAM.NET_C_OR_D_IND = 'C' THEN SAM.REBATE_TRANS_AMT * -1 
     WHEN SAM.NET_C_OR_D_IND IS NULL THEN 0 
     ELSE SAM.REBATE_TRANS_AMT 
     END REBATE_TRANS_AMT 
    ,SAM.MAINT_DTM 
    ,SAM.MAINT_USERID 
    ,SAM.ENRL_STATUS_CD 
    ,SAM.PGM_CIP_CD 
    ,'BATCH' AS LEGACY_USER_ID 
    ,'BATCH' AS MAINT_APP 
    ,SAM.NET_C_OR_D_IND 
    ,ROW_NUMBER() OVER (PARTITION BY SAM.APPL_NBR, SAM.AWARD_YR, SAM.TSYS_SCHL_ID, SAM.AWARD_NBR, SAM.DISB_NBR 
         ORDER BY DTSEQ.INTNL_APPL_SEQ_NBR DESC) ROW_NUM_PART 
    ,COALESCE(DTSEQ.INTNL_APPL_SEQ_NBR,0) INTNL_APPL_SEQ_NBR 
    ,DTSEQ.CHG_GROSS_TRANS_AMT DT_CHG_GROSS_TRANS_AMT 
    ,DTSEQ.CHG_NET_TRANS_AMT DT_CHG_NET_TRANS_AMT 
    ,DTSEQ.CHG_FEE_TRANS_AMT DT_CHG_FEE_TRANS_AMT 
    ,DTSEQ.CHG_REBATE_TRANS_AMT DT_CHG_REBATE_TRANS_AMT 
    ,COALESCE(DTSEQ.SUM_GROSS_AMT,0) SUM_GROSS_AMT 
    ,COALESCE(DTSEQ.SUM_NET_AMT,0) SUM_NET_AMT 
    ,COALESCE(DTSEQ.SUM_FEE_AMT,0) SUM_FEE_AMT 
    ,COALESCE(DTSEQ.SUM_REBATE_AMT,0) SUM_REBATE_AMT 
FROM MYSCHEMA.TEACH_MASTER LM 
JOIN MYSCHEMA.STG_DISB_HOLD SAM 
ON LM.APP_NUM_LEGACY = SAM.APPL_NBR 
AND LM.ATTEND_SCHL_MASTER_ID = SAM.TSYS_SCHL_ID 
AND LM.AWARD_YR = TO_NUMBER(SAM.AWARD_YR) 
LEFT JOIN MYSCHEMA.STG_DISB_TRANS DTSEQ 
    ON SAM.APPL_NBR = DTSEQ.APPL_NBR 
    AND SAM.AWARD_YR = DTSEQ.AWARD_YR 
    AND SAM.TSYS_SCHL_ID = DTSEQ.TSYS_SCHL_ID 
    AND SAM.AWARD_NBR = DTSEQ.AWARD_NBR 
    AND SAM.DISB_NBR = DTSEQ.DISB_NBR 
WHERE SAM.DISB_STAT_CD IN ('R','P') 
    AND SAM.NET_TRANS_CD IN ('0102','0131','0161','0189','0200') 
) A1 
WHERE A1.ROW_NUM_PART = 1 
GROUP BY TO_CHAR(SYSDATE,'YYYY-MM-DD') 
    ,'STG_DISB_HOLD_TH' 
    ,A1.DISB_DT 
    ,A1.CPC 
    ,A1.AWARD_YR 
;"/> 

回答

1

你要逃避他們ALL

 WHEN A1.DISB_STAT_CD [..snip..] A1.NET_C_OR_D_IND <> 'D' THEN A1.NET_TRANS_AMT - A1.NET_TRANS_AMT 
                  ^^--missed a bunch of these 

另外,這下一位是沒有意義的:

<property name="SQL" value="&lt;&gt;&lt;&gt;&lt;&gt;&lt;&gt;&lt;&gt;&lt;&gt;" 
          ^---start attribute    end attribute --^ 
"SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') SQL_RUN_DT 
^---attribute value with no name for it 
+0

好吧,我不我想我懂得如何逃避它們。我對語法感到困惑。 – user2665166

+0

'<'和'>'是正確的方法。你只需要在無處不在 –

+0

當你說我需要在任何地方做到這一點,你的意思是無論< and >存在,我應該用<和>來代替它嗎? – user2665166

相關問題