2016-08-23 9 views
0

2番目の引数で指定されたクエリは、最初の引数がnullの場合にNVLが代替テキストを表示する場合にのみ実行するのが理想です。しかし、以下の問合せでは、最初の引数がNULLでなく、NVLの2番目の引数問合せで使用されたlist_aggのために、文字列連結オーバーフロー・エラーが発生したときに、NVLは問合せを実行しています。最初の引数がNULLでない場合、OracleはNVLの2番目の引数のクエリを実行しています

SELECT NVL (tb1.related_account, 
     (SELECT DISTINCT LISTAGG (A.ac_no, ';') WITHIN GROUP (ORDER BY A.ac_no) 
      FROM ACVW_ALL_AC_ENTRIES A 
      WHERE tb1.trn_ref_no IS NOT NULL AND A.trn_ref_no = tb1.trn_ref_no AND A.trn_code = tb1.trn_code AND A.event = tb1.event AND A.ac_no <> TB1.AC_NO AND A.ac_branch = :param_branch)) FROM ACVW_ALL_AC_ENTRIES tb1 
    INNER JOIN sttb_account tb2 ON tb1.ac_no = tb2.AC_GL_NO 
    INNER JOIN gltm_glmaster tb3 ON tb1.AC_NO = tb3.gl_code 
    INNER JOIN ACTB_ACCBAL_HISTORY tb6 ON tb6.Account = TB1.AC_NO AND TB6.BKG_DATE = TB1.TRN_DT AND TB1.AC_BRANCH = TB6.BRANCH_CODE 
    LEFT OUTER JOIN DETB_RTL_TELLER tb4 ON tb1.TRN_REF_NO = tb4.TRN_REF_NO 
    --      AND TB1.TRN_DT=TB4.TRN_DT 
    INNER JOIN STTM_BRANCH tb5 ON tb1.AC_BRANCH = tb5.BRANCH_CODE 
    INNER JOIN sttm_trn_code ON sttm_trn_code.trn_code = tb1.TRN_CODE 
    LEFT OUTER JOIN swtb_txn_log ON SWTB_TXN_LOG.TRN_REF_NO = TB1.TRN_REF_NO WHERE CUST_GL = 'G' AND TB1.TRN_DT = :Dated AND AC_BRANCH IN (:param_branch) AND tb1.related_account IS NOT NULL 

NVLの最初の引数がnullの場合、NVLの2番目の引数で指定されたクエリの実行を避けるにはどうすればよいですか。

答えて

0

代わりCOALESCEを使用することができます。

Oracle Databaseでは、短絡評価を使用しています。データベースはexprの各値を評価し、いずれかがNULLであるかどうかを判断する前にexprの値をすべて評価するのではなく、NULLであるかどうかを判断します。

独自のNVLではなく、標準SQLであるという利点もあります。

関連する問題