CREATE OR REPLACE PACKAGE RIVUS.XT_UTL_FILE
IS
---- PUT_BLOB
FUNCTION PUT_BLOB(P_FILE IN VARCHAR2,
P_BLOB IN OUT NOCOPY BLOB)
RETURN NUMBER;
---- PUT_CLOB
FUNCTION PUT_CLOB(P_FILE IN VARCHAR2,
P_CLOB IN OUT NOCOPY CLOB,
P_CSNAME IN VARCHAR2:=NULL)
RETURN NUMBER;
---- PUT_CHAR
FUNCTION PUT_CHAR(P_FILE IN VARCHAR2,
P_CHAR IN VARCHAR2,
P_CSNAME IN VARCHAR2:=NULL)
RETURN NUMBER;
---- PUT_RAW
FUNCTION PUT_RAW(P_FILE IN VARCHAR2,
P_RAW IN RAW)
RETURN NUMBER;
END;
/
CREATE OR REPLACE PACKAGE BODY RIVUS.XT_UTL_FILE
IS
-- Java Stored Package Peer
FUNCTION PUT_BLOB_PEER(P_FILE IN VARCHAR2,
P_BLOB IN BLOB)
RETURN NUMBER
AS LANGUAGE JAVA
NAME
'jp.rivus.io.UtilFileSurrogate.writeBlob(java.lang.String, oracle.sql.BLOB)
return java.lang.String';
---- PUT_BLOB
FUNCTION PUT_BLOB(P_FILE IN VARCHAR2,
P_BLOB IN OUT NOCOPY BLOB)
RETURN NUMBER
IS
BEGIN
-- DBMS_JAVA.SET_OUTPUT(2000); -- printStackTrace -> DBMS_OUTPUT
RETURN XT_UTL_FILE.PUT_BLOB_PEER(P_FILE, P_BLOB);
END;
---- PUT_CLOB
FUNCTION PUT_CLOB(P_FILE IN VARCHAR2,
P_CLOB IN OUT NOCOPY CLOB,
P_CSNAME IN VARCHAR2:=NULL)
RETURN NUMBER
IS
vRet NUMBER;
vBlob BLOB;
vDstOffset INTEGER := 1; -- Dest Offset
vSrcOffset INTEGER := 1; -- Source Offset
vCSID NUMBER; -- Charset ID
vLangContext INTEGER := DBMS_LOB.DEFAULT_LANG_CTX; -- Lang Context
vWarning INTEGER := DBMS_LOB.NO_WARNING; -- Warning
BEGIN
vCSID := NVL(CASE WHEN P_CSNAME IS NOT NULL THEN NLS_CHARSET_ID(P_CSNAME)
ELSE DBMS_LOB.DEFAULT_CSID END, DBMS_LOB.DEFAULT_CSID);
DBMS_LOB.CREATETEMPORARY(vBlob, TRUE, DBMS_LOB.CALL); -- BLOB 初期化
DBMS_LOB.CONVERTTOBLOB(vBlob, P_CLOB, DBMS_LOB.LOBMAXSIZE,
vDstOffset, vSrcOffset, vCSID, vLangContext, vWarning);
vRet := XT_UTL_FILE.PUT_BLOB(P_FILE, vBlob);
DBMS_LOB.FREETEMPORARY(vBlob);
RETURN vRet;
END;
---- PUT_CHAR
FUNCTION PUT_CHAR(P_FILE IN VARCHAR2,
P_CHAR IN VARCHAR2,
P_CSNAME IN VARCHAR2:=NULL)
RETURN NUMBER
IS
vClob CLOB;
BEGIN
vClob := P_CHAR;
RETURN XT_UTL_FILE.PUT_CLOB(P_FILE, vClob, P_CSNAME);
END;
---- PUT_RAW
FUNCTION PUT_RAW(P_FILE IN VARCHAR2,
P_RAW IN RAW)
RETURN NUMBER
IS
vBlob BLOB;
BEGIN
vBlob := P_RAW;
RETURN XT_UTL_FILE.PUT_BLOB(P_FILE, vBlob);
END;
END XT_UTL_FILE;
/