Home| Progetto| Web| Faq| Acronimi | ||||
Argomenti Documenti pubblicabili:1120
Scripts:1282 Documenti non pubblicabili:162 Categorie tematiche:68 .Net |_C# |_Visual basic.net |_Asp.net Active Server Pages C++ Cascade Style Sheet JavaScript Mysql Php Xml Java |_Java 2 Micro Edition |_Java server pages |_Java Servlet Oracle |_PLSQL PostgreSQL Unix
PLSQL...
Info:
Rapprensentare un apostrofo in sql e pl/sql
Oracle...
Script:
Dato il nome di una vista ricava informazioni su tipo e attributi della colonna di riferimenti
Unix...
Tip:
Rimuovere un file in Unix / Delete a file
PLSQL...
Script:
Pragma Exception
PLSQL...
Tip:
Function
Shell scripting...
Script:
Executing arithmetic operation in shell program
La rabbia è creativa, la depressione è senza utilità
Dyson, Freeman J.
Php Funzione mail()
Charles Babbage(1791-1871) nel 1823 ottenne dal governo 100 Sterline per la costruzione del calcolatore Different Engine.
La rabbia è creativa, la depressione è senza utilità
Dyson, Freeman J.
|
PLSQL
Home >PLSQL > Gestire LOB objects
Obiettivi:
Da Oracle 10g,l'oggetto directory è utilizzato per gestire file, pertanto creiamo una directory, prima sul file system del server Oracle, da registrare successivamente nel database:
[oracle@serverX1 ~]$ mkdir /tmp/dir_documents
Per questo esempio, copiamo alcuni file di dimensioni ragionevoli nella cartella di varie tipologie e creiamo anche al volo un piccolo file di testo, per una successiva verifica da query del caricamento in BLOB.
[oracle@serverX1 dir_documents]$ echo "Hello From the FishScript.com to all tecs around the world" > shortText.txt
Pertanto sulla directory /tmp/dir_documents ci sono adesso alcuni file di esempio da caricare sul database: [oracle@serverX1 dir_documents]$ ll -latr total 108 -rw-r----- 1 oracle oinstall 94379 May 5 11:25 alert_CUSTOMER01.log -rw-r--r-- 1 oracle oinstall 174 May 5 14:31 foto01.gif -rw-r--r-- 1 oracle oinstall 62 May 5 15:07 shortText.txt Adesso, accediamo nel database, creiamo tabella, directory e procedura di esempio. Per semplificare, viene utilizzato lo schema SYSTEM, in altri casi ricordarsi di assegnare eventualmente privilegi di lettura/scrittura sulla directory allo schema utilizzato [oracle@serverX1 ]$ sqlplus system/manager SQL*Plus: Release 10.2.0.4.0 - Production on Thu May 5 18:07:01 2011 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options-- creare la directory DIR_DOCUMENTS CREATE DIRECTORY DIR_DOCUMENTS as '/tmp/dir_documents'; Directory created. -- creiamo anche la tabella DOCUMENTS, sempre buona pratica allocare colonne di tipo blob in tablespace dedicata. CREATE TABLE DOCUMENTS( FILE_NAME VARCHAR2(32), BDATA BLOB) TABLESPACE USERS LOB (BDATA) STORE AS (TABLESPACE LOBDATA); Table created. Adesso creare la procedura PRO_FILE_TO_BLOB, che deve caricare in tabella il file posizionato nella passato come parametro dalla directory definita. I punti principali del codice sono:
Ecco la procedura: CREATE OR REPLACE PROCEDURE PRO_FILE_TO_BLOB(VFILENAME IN VARCHAR2) AS L_BLOB BLOB; BLOB_DEST BLOB; L_BFILE BFILE; BEGIN INSERT INTO DOCUMENTS (FILE_NAME,BDATA) VALUES (VFILENAME,EMPTY_BLOB); SELECT BDATA INTO BLOB_DEST FROM DOCUMENTS WHERE FILE_NAME = VFILENAME; L_BFILE := BFILENAME ('DIR_DOCUMENTS', VFILENAME); DBMS_LOB.OPEN(L_BFILE,DBMS_LOB.LOB_READONLY); DBMS_LOB.OPEN(BLOB_DEST,DBMS_LOB.LOB_READWRITE); DBMS_LOB.LOADFROMFILE(BLOB_DEST, L_BFILE,DBMS_LOB.LOBMAXSIZE,1,1); DBMS_LOB.CLOSE(BLOB_DEST); DBMS_LOB.CLOSE(L_BFILE); COMMIT; END; / Procedure created. -- per eseguire la procedura insere i nomi dei file da caricare:
exec PRO_FILE_TO_BLOB('shortText.txt'); :
SQL>exec PRO_FILE_TO_BLOB('shortText.txt'); PL/SQL procedure successfully completed. SQL>exec PRO_FILE_TO_BLOB('alert_CUSTOMER01.log'); PL/SQL procedure successfully completed. SQL>exec PRO_FILE_TO_BLOB('foto01.gif'); PL/SQL procedure successfully completed. Adesso verifichiamo se le righe sono state caricate: SQL> col file_name format a20; SQL> select file_name from documents; FILE_NAME -------------------- shortText.txt alert_CUSTOMER01.log foto01.gif Adesso verifichiamo anche con una rapida query se il file più semplice è stato caricato, non aspettarsi di visualizzare risultati utili via query per i file nei formati binary (gif, doc, etc):
SQL> SELECT UTL_RAW.CAST_TO_VARCHAR2 (DBMS_LOB.SUBSTR(BDATA,25000, 1)) BDATA FROM SYS.DOCUMENTS WHERE FILE_NAME ='shortText.txt';
Adesso, invertiamo l'operazione creando una procedura che esporti il contenuto di colonna oracle BLOB su file.
BDATA ------------------------------------------------------------- Hello From the FishScript.com to all \n tecs around the world Creiamo una directory di destinazione su fylesystem
[oracle@serverX1 tmp]$ mkdir /tmp/bdata_on_filesystem
Connettiamoci nuovamente al database, pre registrare la directory di destinazione, e la procedura di esportazione. [oracle@serverX1 ] sqlplus system/manager (...) SQL> CREATE OR REPLACE DIRECTORY BLOB_TO_FILESYSTEM AS '/tmp/bdata'; Directory created. -- quindi creiamo la procedura PRO_BLOB_TO_FILE CREATE OR REPLACE PROCEDURE PRO_BLOB_TO_FILE(VFILENAME IN VARCHAR2) AS VBLOB BLOB; VBLOB_LENGTH INTEGER; VOUT_FILE UTL_FILE.FILE_TYPE; V_BUFFER RAW(32767); VCHUNK_SIZE BINARY_INTEGER := 32767; BLOB_POSITION INTEGER := 1; BEGIN SELECT BDATA INTO VBLOB FROM DOCUMENTS WHERE FILE_NAME = VFILENAME ; VBLOB_LENGTH:=DBMS_LOB.GETLENGTH(VBLOB); VOUT_FILE := UTL_FILE.FOPEN ('BLOB_TO_FILESYSTEM',VFILENAME, 'WB', VCHUNK_SIZE); -- WRITE THE BLOB TO FILE IN CHUNKS WHILE BLOB_POSITION <= VBLOB_LENGTH LOOP IF BLOB_POSITION + VCHUNK_SIZE - 1 > VBLOB_LENGTH THEN VCHUNK_SIZE := VBLOB_LENGTH - BLOB_POSITION + 1; END IF; DBMS_LOB.READ(VBLOB, VCHUNK_SIZE, BLOB_POSITION, V_BUFFER); UTL_FILE.PUT_RAW(VOUT_FILE, V_BUFFER, TRUE); BLOB_POSITION := BLOB_POSITION + VCHUNK_SIZE; END LOOP; -- CLOSE THE FILE HANDLE UTL_FILE.FCLOSE (VOUT_FILE); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (' PARAMETRI NON CORRETTI, CONTROLLA OGGETTO E PRIVILEGI DIRECTORY, NOME DEL FILE , TABELLA'); END; / Eseguire la procedura e verificare che il contenuto del BLOB sia stato exportato su filesystem:
SQLPLUS> exec PRO_BLOB_TO_FILE('foto01.gif');
Segue anche un esempio di blocco anonimo per esportare su filesystem i contenuti della colonna blob:
DECLARE VBLOB BLOB; VBLOB_LENGTH INTEGER; VOUT_FILE UTL_FILE.FILE_TYPE; V_BUFFER RAW(32767); VCHUNK_SIZE BINARY_INTEGER := 32767; BLOB_POSITION INTEGER := 1; BEGIN FOR R IN ( SELECT FILE_NAME, BDATA FROM DOCUMENTS ) LOOP VBLOB_LENGTH:=DBMS_LOB.GETLENGTH(R.BDATA); VOUT_FILE := UTL_FILE.FOPEN ('BLOB_TO_FILESYSTEM',R.FILE_NAME, 'WB', VCHUNK_SIZE); WHILE BLOB_POSITION <= VBLOB_LENGTH LOOP IF BLOB_POSITION + VCHUNK_SIZE - 1 > VBLOB_LENGTH THEN VCHUNK_SIZE := VBLOB_LENGTH - BLOB_POSITION + 1; END IF; DBMS_LOB.READ(R.BDATA, VCHUNK_SIZE, BLOB_POSITION, V_BUFFER); UTL_FILE.PUT_RAW(VOUT_FILE, V_BUFFER, TRUE); BLOB_POSITION := BLOB_POSITION + VCHUNK_SIZE; END LOOP; -- CLOSE THE FILE HANDLE UTL_FILE.FCLOSE (VOUT_FILE); BLOB_POSITION:=1; END LOOP; END; / Warning: include(ads/text468x15.html): failed to open stream: No such file or directory in D:\inetpub\webs\fishscriptcom\documents\view_document.php on line 131 Warning: include(): Failed opening 'ads/text468x15.html' for inclusion (include_path='.;C:\php\pear') in D:\inetpub\webs\fishscriptcom\documents\view_document.php on line 131 Tutorial ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Script ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Comandi ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Codici errore ![]() ![]() ![]() ![]() ![]() |
Cerca
PLSQL...
Info:
Exception
Il web è un giovane media: infatti ha solo 10 anni di età.
Si pensi alla televisione o al cinema all'età di 10 anni. A quei tempi questi media erano primitivi, ancora alla ricerca della loro strada.
Venivano esplorati i limiti della nuova tecnologia, ma grandi progressi dovevano ancora essere raggiunti.
Oggi, i professionisti del web si trovano nella stessa fase. Sono pionieri che stanno ancora esplorando i limiti del nuovo media. Senza dubbio, i nostri nipoti, quando vedranno quello che abbiamo fatto pensaranno a qualcosa di elementare.
C'è ancora molto da scopire su quello che il Web può fare e suo come può essere utilizzato.
Jason Foss
Il web è un giovane media: infatti ha solo 10 anni di età.
Si pensi alla televisione o al cinema all'età di 10 anni. A quei tempi questi media erano primitivi, ancora alla ricerca della loro strada.
Venivano esplorati i limiti della nuova tecnologia, ma grandi progressi dovevano ancora essere raggiunti.
Oggi, i professionisti del web si trovano nella stessa fase. Sono pionieri che stanno ancora esplorando i limiti del nuovo media. Senza dubbio, i nostri nipoti, quando vedranno quello che abbiamo fatto pensaranno a qualcosa di elementare.
C'è ancora molto da scopire su quello che il Web può fare e suo come può essere utilizzato.
Jason Foss
PLSQL...
Info:
Exception
PLSQL...
Definizioni:
PL/SQL
Oracle...
Definizioni:
Set di caratteri (Characterset)
Shell scripting...
Script:
Array in do while construct
fishScript.Com is accessible by Mobile access technology
as mobile phones, Palm and Pocket PC .
Nicoleta e Marco Magnani tutorial, examples, courses, esempi, corsi, esercizi, appunti vari Dottoressa Nicoleta Dragu Formatrice Docente Insegnante Mediatrice Culturale Dott. Marco Magnani Universita La Sapienza Roma Master Computer Science Hunter College New York , Data Base Administrator DBA oracle System architect |