August 22, 2014
Assuming that you have a list of physical images needed to be loaded into Oracle database. And also you have a free text list of the files, perhaps in form of CSV file format.
From above, you may already get the bigger picture of the scenario which you need to execute.
Lets consider this task needed to be execute in Oracle using Oracle procedure.
The PL/SQL
I already prepared the PL/SQL example for this purpose. Check the code below;
From above, you may already get the bigger picture of the scenario which you need to execute.
Lets consider this task needed to be execute in Oracle using Oracle procedure.
The PL/SQL
I already prepared the PL/SQL example for this purpose. Check the code below;
CREATE OR REPLACE PROCEDURE PROC_LOAD_IMAGES (FILE_DIR in VARCHAR2 , MYFILE_NAME in VARCHAR2) AS
-- FILE_DIR is the directory of the flat file and images
-- MYFILE_NAME is the flat file name
F UTL_FILE.FILE_TYPE;
V_LINE VARCHAR2 (1000);
V_CACC_OLD_NUM VARCHAR2(24 BYTE);
V_IDENT_TYPE NUMBER(1);
V_ID_NUMBER VARCHAR2(20 BYTE);
V_FILE_NAME VARCHAR2(80 BYTE);
V_FILE_BLOB BLOB;
V_CLASS VARCHAR2(1 BYTE);
lFile BFILE;
BEGIN
F := UTL_FILE.FOPEN (upper(FILE_DIR), MYFILE_NAME, 'R');
IF UTL_FILE.IS_OPEN(F) THEN
LOOP
BEGIN
UTL_FILE.GET_LINE(F, V_LINE, 1000);
IF V_LINE IS NULL THEN
EXIT;
END IF;
--If using piping, change to '[^|]+'
V_CACC_OLD_NUM := REGEXP_SUBSTR(V_LINE, '[^|]+', 1, 1);
V_IDENT_TYPE := REGEXP_SUBSTR(V_LINE, '[^|]+', 1, 2);
V_ID_NUMBER := REGEXP_SUBSTR(V_LINE, '[^|]+', 1, 3);
V_FILE_NAME := REGEXP_SUBSTR(V_LINE, '[^|]+', 1, 4);
V_CLASS := REGEXP_SUBSTR(V_LINE, '[^|]+', 1, 5);
INSERT INTO BS_SIGNATURE_IMAGES (CACC_OLD_NUM, IDENT_TYPE, ID_NUMBER, FILE_NAME, CLASS) VALUES( V_CACC_OLD_NUM, V_IDENT_TYPE, V_ID_NUMBER, empty_blob(), V_CLASS) RETURNING FILE_NAME INTO V_FILE_BLOB;
lFile := BFILENAME(upper(FILE_DIR), V_FILE_NAME);
IF dbms_lob.fileexists(lFile) = 1 THEN
DBMS_LOB.OPEN(lFile, DBMS_LOB.LOB_READONLY);
DBMS_LOB.OPEN(V_FILE_BLOB, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.LOADFROMFILE(DEST_LOB => V_FILE_BLOB,
SRC_LOB => lFile,
AMOUNT => DBMS_LOB.GETLENGTH(lFile));
DBMS_LOB.CLOSE(lFile);
DBMS_LOB.CLOSE(V_FILE_BLOB);
END IF;
COMMIT;
EXIT;
END;
END LOOP;
END IF;
UTL_FILE.FCLOSE(F);
END;
/
The important portion UTL_FILE function. This is the function to read the file and responsible to load the files into BLOB format into the database.
No comments:
Post a Comment