1. 程式人生 > >ORA-00932:資料型別不一致:應為-,但卻獲得CLOB

ORA-00932:資料型別不一致:應為-,但卻獲得CLOB

SELECT * FROM
(
       SELECT SUM(debitquantity) AS "debitquantity",
              SUM(debitamount) AS "debitamount",
              SUM(localdebitamount) AS "localdebitamount",
              SUM(creditquantity) AS "creditquantity",
              SUM(creditamount) AS "creditamount",
              SUM(localcreditamount) AS "localcreditamount",
              TO_CHAR(WM_CONCAT(DISTINCT tablex.pkAccsubj)) AS pkAccsubj
        FROM (SELECT SUM(glDetail.creditamount) AS creditamount,
                     SUM(glDetail.debitamount) AS debitamount,
                     SUM(glDetail.localcreditamount) AS localcreditamount,
                     SUM(glDetail.localdebitamount) AS localdebitamount,
                     SUM(glDetail.creditquantity) AS creditquantity,
                     SUM(glDetail.debitquantity) AS debitquantity,
                     glDetail.pk_accsubj AS pkAccsubj
               FROM gl_detail glDetail
               LEFT JOIN bd_accsubj bdAccsubj
               ON glDetail.pk_accsubj = bdAccsubj.pk_accsubj
               LEFT JOIN gl_voucher glVoucher
               ON glDetail.pk_voucher = glVoucher.pk_voucher
               WHERE 1 = 1
                   AND glDetail.yearv = '2014'
                   AND glDetail.periodv = '01'
                   AND bdAccsubj.subjcode LIKE CONCAT(1001, '%')
                   AND glVoucher.pk_corp = '1012'
                   AND glVoucher.isdifflag = 'N'
                   AND (glVoucher.pk_manager IS NOT NULL AND
                       glVoucher.pk_manager != 'N/A')
         GROUP BY glDetail.yearv, glDetail.periodv, glDetail.pk_accsubj) tablex
) tableA 
LEFT JOIN
(
     SELECT (SUM(debitquantity) - SUM(creditquantity)) AS "initamount",
            (SUM(debitamount) - SUM(creditamount)) AS "initcreditamount",
            (SUM(localdebitamount) - SUM(localcreditamount)) AS "initdebitamount",
            TO_CHAR(WM_CONCAT(DISTINCT tabley.pkAccsubj)) AS pkAccsubj
     FROM (SELECT SUM(glDetail.creditamount) AS creditamount,
                  SUM(glDetail.debitamount) AS debitamount,
                  SUM(glDetail.localcreditamount) AS localcreditamount,
                  SUM(glDetail.localdebitamount) AS localdebitamount,
                  SUM(glDetail.creditquantity) AS creditquantity,
                  SUM(glDetail.debitquantity) AS debitquantity,
                  glDetail.pk_accsubj AS pkAccsubj
          FROM gl_detail glDetail
          LEFT JOIN bd_accsubj bdAccsubj
            ON glDetail.pk_accsubj = bdAccsubj.pk_accsubj
          LEFT JOIN gl_voucher glVoucher
            ON glDetail.pk_voucher = glVoucher.pk_voucher
         WHERE 1 = 1
           AND glDetail.yearv = '2014'
           AND bdAccsubj.subjcode LIKE CONCAT(1001, '%')
           AND glVoucher.pk_corp = '1012'
           AND glVoucher.isdifflag = 'N'
           AND (glVoucher.pk_manager IS NOT NULL AND
               glVoucher.pk_manager != 'N/A')
         GROUP BY glDetail.yearv, glDetail.periodv, glDetail.pk_accsubj) tabley
) tableB ON tableA.pkAccsubj = tableB.pkAccsubj
我出現上面這個異常的原因是:WM_CONCAT()函式返回的是文字型別,作為關聯欄位時取得CLOB沒有,沒有取到真正的欄位值,將欄位TO_CHAR()轉為字串便沒有報錯了。