Layer 06

Utilizzo dei campi LOB di Oracle in ColdFusion

Creazione della tabella con campo tipo clob

create table clob_test( id number, clob_col clob primary key(id)) In questo esempio do per scontato che il campo id sia creato automaticamente da una sequenza ed un trigger su Oracle, per maggiori informazioni su come fare un campo autoincrement in oracle clickare qui Il campo che conterrà l’immagine è il campo clob_col di tipo clob (acronimo di Chatacter Large OBject) a questo punto vi sarete già accorti di un’incongruenza, un’immagine è in formato binario, esatto, questo fa si che il trasferimento tra cold Fusion ed oracle di un oggetto binario non sia sempre così facile, per ovviare al problema, faremo in modo di convertire l’immagine da formato binario a formato carattere e poi di riconvertirla al momento della lettura. Adesso che la nostra tabella è stata creata andiamo a leggere l’immagine: Lettura del file

<cffile action = “readbinary”    file = “c: empimage.jpg”    variable=”image_blob”> Scrittura all’interno del database adesso che abbiamo la variabile image_blob possiamo scriverla direttamente dentro al DB, da notare che untilizziamo cfqueryparam e che convertiamo l’immagine con la funzione toBase64()

<cfquery name=”inserimento”    datasource=”DSN”    username=”nomeUtente”    password=”Pwd”&gt    insert into       clob_test    values       (<cfqueryparam value=#toBase64(image_blob)#             CFSQLType=”CF_SQL_CLOB”>) </cfquery> Ora la nostra immagine è nel database, se proviamo ad interrogare il database, otterremo una versione “carattere” dell’immagine, la grandezza dell’immagine in byte è simile alla lunghezza del campo, utilizzando questa query dovremmo essere in grado di capire le dimensioni dell’immagine:

select dbms_lob.getlength(clob_col) from clob_column Il risultato ottenuto è molto vicino alla reale dimensione dell’immagine, questo perchè l’immagine è stata convertita in base64. Estraiamo l’immagine e scriviamo su disco Ovviamente per leggere l’immagine basta una semplice interrogazione, mentre per scriverla sul filesystem del server dobbiamo utilizzare la funzione toBinary(), ecco il codice:

<cfquery name=”rtrImmagine”    datasource=”DSN”    username=”nomeUtente”    password=”Pwd”>    select        from    clob_test       where id=1 </cfquery> <cffile action = “write”    file = “c:image.jpg”    output=#toBinary(select_clob.clob_col[1])#    addnewline=”no”>

]]>