Oracle
 sql >> Base de données >  >> RDS >> Oracle

Importation de fichiers dans Oracle Apex à l'aide de wwv_flow_files

Supposons que vous souhaitiez importer un contenu de fichier csv avec une procédure de base de données personnalisée dans Oracle Apex à l'aide de l'élément de page de navigation de fichier. Suivez ces étapes :Créez un élément de page de navigation de fichier dans Apex et choisissez l'option wwv_flow_files pour stocker le fichier.Ensuite, créez le processus de page et choisissez après soumission et exécution de l'option de validation et de l'option de code plsql pour le processus.Dans la zone plsql, écrivez le code suivant pour exporter le fichier csv de la base de données (vue wwv_flow_files) vers le lecteur du serveur, puis appelez votre procédure personnalisée pour importer le contenu de ce fichier dans une table.DECLARE
v_upl_blob BLOB ;
vstart Number :=1 ;
bytelen Number :=32000;
len Number;
my_vr Raw (32000);
x Number;
l_output Utl_file.file_type;
erout varchar2(1000);
BEGIN
SELECT blob_content
INTO v_upl_blob
FROM wwv_flow_files
WHERE name =:P25_FB;
-- :p25_fb est l'élément de navigation du fichier dans la page
LEN :=Dbms_lob.getlength(V_UPL_BLOB);
l_output :=Utl_File.fopen ('MY_FILES', :P25_FB, 'wb', 32760);
vstart :=1;
bytelen :=32000;
IF len <32760
Then
Utl_File.put_raw (l_output, V_UPL_BLOB);
Utl_File.fflush (l_output);
Sinon -- écrire en morceaux
vstart :=1;

WHILE vstart 0
LOOP
Dbms_lob.Read (V_UPL_BLOB, bytelen, vstart, my_vr);
Utl_File.put_raw (l_output, my_vr);
Utl_File.fflush (l_output);
-- définit la position de début pour la prochaine coupe
vstart :=vstart + bytelen;
-- définit la position de fin si moins de 32 000 octets
x :=x - octets ;

IF x <32000
Alors
bytelen :=x;
END IF;
END LOOP;
END IF;

Utl_File.fclose (l_output);

DELETE FROM wwv_flow_files
WHERE name =:P25_FB;
COMMIT;
--- appelez votre procédure de base de données personnalisée pour importer...
votreprocédurepersonnalisée(:P25_FB);
EXCEPTION When Others
Then
IF Utl_File.is_Open(l_output) Then
Utl_File.fclose (L_OUTPUT);
END IF;
augmenter;
END;