From 9a5e347cad1508b1fda72416da9b4e88e351adc6 Mon Sep 17 00:00:00 2001 From: erilong Date: Wed, 17 Oct 2007 13:49:15 +0000 Subject: [PATCH] handle null blob properly --- .../main/resources/oracle-transactionid.sql | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/symmetric/src/main/resources/oracle-transactionid.sql b/symmetric/src/main/resources/oracle-transactionid.sql index 2d560b3b3d..4f6e2ae113 100644 --- a/symmetric/src/main/resources/oracle-transactionid.sql +++ b/symmetric/src/main/resources/oracle-transactionid.sql @@ -24,20 +24,20 @@ CREATE OR REPLACE package body pack_symmetric as CREATE OR REPLACE FUNCTION fn_sym_blob2clob (blob_in IN BLOB) RETURN CLOB AS - v_clob CLOB; + v_clob CLOB := null; v_varchar VARCHAR2(32767); v_start PLS_INTEGER := 1; v_buffer PLS_INTEGER := 32767; BEGIN - DBMS_LOB.CREATETEMPORARY(v_clob, TRUE); - - FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(blob_in) / v_buffer) - LOOP - v_varchar := UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(blob_in, v_buffer, v_start)); - DBMS_LOB.WRITEAPPEND(v_clob, LENGTH(v_varchar), v_varchar); - v_start := v_start + v_buffer; - END LOOP; - + IF blob_in IS NOT NULL THEN + DBMS_LOB.CREATETEMPORARY(v_clob, TRUE); + FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(blob_in) / v_buffer) + LOOP + v_varchar := UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(blob_in, v_buffer, v_start)); + DBMS_LOB.WRITEAPPEND(v_clob, LENGTH(v_varchar), v_varchar); + v_start := v_start + v_buffer; + END LOOP; + END IF; RETURN v_clob; END fn_sym_blob2clob; /