Bonjour à toutes et tous,
Soit une table FICHIERSPHYS_FIPH comme suit :
J'ai donc des blobs, qui sont des fichiers zippés (.zip) que je souhaite récupérer afin de les retraiter (oui, nous avons un problème avec certains d'entre eux).FIPH_ID NUMBER(19) NO NO NO NO 3 19 0 1
FIPH_DIS VARCHAR2(11 Byte) NO NO NO NO 12 11 -1 2
CONTENU BLOB NO NO NO NO 2004 4000 -1 3
TAILLE NUMBER(19) NO NO NO NO 3 19 0 4
TYPEMIME VARCHAR2(20 Byte) NO NO NO NO 12 20 -1 5
NOMFICHIER VARCHAR2(50 Byte) NO YES NO NO 12 50 -1 6
EMETTEUR VARCHAR2(6 Byte) NO YES NO NO 12 6 -1 7
FORMATFICHIER VARCHAR2(20 Byte) NO YES NO NO 12 20 -1 8
Pour cela, j'essaie d'utiliser PL/SQL, que je ne maitrise absolument pas.
Voici le contenu de mon script :
Hélas, à l'exécution, j'obtiens le message suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 DECLARE v_start NUMBER(38,0) := 1; v_size CONSTANT NUMBER( 5,0) := 32000; v_len NUMBER(38,0); v_buffer RAW(32000); v_file UTL_FILE.FILE_TYPE; BEGIN FOR r IN ( SELECT NOMFICHIER, CONTENU FROM FICHIERSPHYS_FIPH ) LOOP v_file := UTL_FILE.FOPEN(r.NOMFICHIER, 'wb', 32760 ); v_len := DBMS_LOB.GETLENGTH( r.CONTENU ); WHILE v_start <= v_len LOOP DBMS_LOB.READ( r.CONTENU, LEAST( v_len - v_start + 1, v_size ), v_start, v_buffer ); UTL_FILE.PUT_RAW( v_file, v_buffer ); UTL_FILE.FFLUSH( v_file ); v_start := v_start + v_size; END LOOP; UTL_FILE.FCLOSE( v_file ); END LOOP; END; /
Quelques recherches semblent indiquer qu'il s'agirait d'un problème de variable IN/OUT (An IN parameter is writing data to a stored procedure, an OUT parameter is reading data from a stored procedure, and an IN OUT parameter is writing data to and reading data from a stored procedure).start /tmp/plsql_OC242.sql
LEAST( v_len - v_start + 1, v_size ),
*
ERROR at line 15:
ORA-06550: line 15, column 9:
PLS-00363: expression 'LEAST(+(-(V_LEN, V_START), 1), V_SIZE)' cannot be used as an assignment target
ORA-06550: line 13, column 7:
PL/SQL: Statement ignored
Mais mes essais successifs n'ont pas permis d'aboutir à une solution.
Auriez-vous des indications à me proposer?
Je vous remercie et vous souhaite une bonne journée.
Cordialement,
Thomas
Partager