{"id":153,"date":"2014-06-02T16:04:54","date_gmt":"2014-06-02T16:04:54","guid":{"rendered":"http:\/\/artigianodelsoftware.wordpress.com\/?p=153"},"modified":"2014-06-02T16:04:54","modified_gmt":"2014-06-02T16:04:54","slug":"scrivere-file-con-oracle","status":"publish","type":"post","link":"https:\/\/artigianodelsoftware.it\/blog\/2014\/06\/02\/scrivere-file-con-oracle\/","title":{"rendered":"Scrivere file con Oracle"},"content":{"rendered":"<div class=\"pdfprnt-buttons pdfprnt-buttons-post pdfprnt-top-right\"><a href=\"javascript: imageToPdf()\" class=\"pdfprnt-button pdfprnt-button-pdf\" target=\"_self\"><img src=\"https:\/\/artigianodelsoftware.it\/blog\/wp-content\/plugins\/pdf-print\/images\/pdf.png\" alt=\"image_pdf\" title=\"Visualizza PDF\" \/><\/a><a href=\"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/posts\/153?print=print\" class=\"pdfprnt-button pdfprnt-button-print\" target=\"_blank\"><\/a><\/div><p>Oggi tratteremo un argomento molto semplice. Si tratta della gestione dei file da parte di Oracle.<\/p>\n<p>Oracle consente di poter leggere\/scrivere dei file attraverso un package standard:\u00a0<strong>UTL_FILE;\u00a0<\/strong>che mette a disposizione tutti i metodi necessari per poter eseguire qualsiasi operazione sui file.<\/p>\n<blockquote><p><strong>Una piccola raccomandazione: Prima di poter utilizzare il package, assicurarsi che l&#8217;utenza funzionale, cui impostare la stored procedure\/package di utilizzo dei file, disponga delle grant di execute per poter usare il package. Se non dispone di tali grant, chiedere all&#8217;amministratore del Database di fornirle.<\/strong><\/p><\/blockquote>\n<p>Come prima cosa, occorre indicare ad Oracle dove si intende andare ad eseguire le operazioni di lettura\/scrittura dei file. Per far ci\u00f2, occorre definire una DIRECTORY, ovvero indicare ad Oracle dove eseguire le varie operazioni. Per far ci\u00f2, si utilizza il seguente comando:<\/p>\n<blockquote><p><em><strong>CREATE OR REPLACE DIRECTORY TMP_DIR AS &#8216;&lt;path completo della directory&gt;&#8217;;<\/strong><\/em><\/p><\/blockquote>\n<p>Attraverso questa istruzione si indica la directory (locale al server dove \u00e8 installato il DB Oracle), dove sar\u00e0 possibile eseguire le varie operazioni di lettura\/scrittura dei file. E&#8217; bene ribadire che le operazioni di lettura\/scrittura sono eseguite sulla macchina locale e non su dei server remoti. Se si ha la necessit\u00e0 di poter scrivere su dei server remoti, occorre disporre di altre procedure, che magari sfruttando il protocollo FTP, possano scrivere i file su server remoti. Package e procedure sono disponibili e saranno trattati in un altro post.<\/p>\n<blockquote><p><em><strong> Si segnala altres\u00ec che la directory non appartiene ad uno schema specifico. Occorre quindi prestare attenzione al nome della directory da usare, in quanto \u00e8 univoco per l&#8217;intero database.<\/strong><\/em><\/p><\/blockquote>\n<p>Una volta che a directory \u00e8 stata creata, adesso usiamo i metodi del package per scrivere un semplice file:<\/p>\n<blockquote><p><em><strong>\/*<\/strong><\/em><br \/>\n<em><strong> * Codice di esempio di scrittura di un file<\/strong><\/em><br \/>\n<em><strong> *\/<\/strong><\/em><\/p>\n<p><em><strong>DECLARE<\/strong><\/em><\/p>\n<p><em><strong>lv_nome_file VARCHAR2(2000);<\/strong><\/em><br \/>\n<em><strong> lv_percorso_file VARCHAR2(2000);<\/strong><\/em><br \/>\n<em><strong> lv_file_id UTL_FILE.file_type;<\/strong><\/em><\/p>\n<p><em><strong>BEGIN<\/strong><\/em><\/p>\n<p><em><strong>lv_percorso_file := &#8216;&lt;directory_definita&gt;&#8217;;<\/strong><\/em><br \/>\n<em><strong> lv_nome_file := &#8216;&lt;nome_file_da_scrivere&gt;;<\/strong><\/em><\/p>\n<p><em><strong>&#8212; Apertura del file<\/strong><\/em><br \/>\n<em><strong> lv_file_id := UTL_FILE.fopen( lv_percorso_file, lv_nome_file, &#8216;w&#8217; );<\/strong><\/em><\/p>\n<p><em><strong>&#8212; Scrittura della riga nel file<\/strong><\/em><br \/>\n<em><strong> UTL_FILE.put_line(file =&gt; lv_file_id , buffer =&gt; &#8216;Questo \u00e8 un esempio di testo scritto su di un file&#8217; );<\/strong><\/em><\/p>\n<p><em><strong>&#8212; Chiusura del file.<\/strong><\/em><br \/>\n<em><strong> UTL_FILE.fclose(file =&gt; lv_file_id );<\/strong><\/em><\/p>\n<p><em><strong>EXCEPTION<\/strong><\/em><br \/>\n<em><strong> WHEN OTHERS THEN<\/strong><\/em><br \/>\n<em><strong> DBMS_OUTPUT.PUT_LINE(&#8216;Errore &#8211; &#8216; || TO_CHAR(SQLCODE) || &#8216; &#8211; &#8216; || SUBSTR(SQLERRM,1,150));<\/strong><\/em><br \/>\n<em><strong> END;<\/strong><\/em><\/p><\/blockquote>\n<p>Analogamente, la lettura di un file viene eseguita con un codice similare e sfruttando gli stessi metodi.<\/p>\n<blockquote><p><em><strong>\/*<\/strong><\/em><br \/>\n<em><strong> * Codice di esempio di lettura di un file<\/strong><\/em><br \/>\n<em><strong> *\/<\/strong><\/em><\/p>\n<p><em><strong>DECLARE<\/strong><\/em><br \/>\n<em><strong> lv_nome_file VARCHAR2(2000);<\/strong><\/em><br \/>\n<em><strong> lv_percorso_file VARCHAR2(2000);<\/strong><\/em><br \/>\n<em><strong> lv_file_id UTL_FILE.file_type;<\/strong><\/em><br \/>\n<em><strong> lv_text VARCHAR2(32767);<\/strong><\/em><br \/>\n<em><strong> BEGIN<\/strong><\/em><\/p>\n<p><em><strong>lv_percorso_file := &#8216;&lt;directory_definita&gt;&#8217;;<\/strong><\/em><br \/>\n<em><strong> lv_nome_file := &#8216;&lt;nome_file_da_scrivere&gt;;;<\/strong><\/em><\/p>\n<p><em><strong>lv_file_id := UTL_FILE.fopen(\u00a0lv_percorso_file, \u00a0lv_nome_file, &#8216;r&#8217;, 32767);<\/strong><\/em><\/p>\n<p><em><strong>BEGIN<\/strong><\/em><\/p>\n<p><em><strong>LOOP<\/strong><\/em><\/p>\n<p><em><strong>UTL_FILE.get_line(lv_file_id, lv_text, 32767);<\/strong><\/em><br \/>\n<em><strong> DBMS_OUTPUT.put_line(&#8216;Line: |&#8217; || lv_text || &#8216;|&#8217;);<\/strong><\/em><br \/>\n<em><strong> END LOOP;<\/strong><\/em><br \/>\n<em><strong> EXCEPTION<\/strong><\/em><br \/>\n<em><strong> WHEN NO_DATA_FOUND THEN<\/strong><\/em><br \/>\n<em><strong> NULL;<\/strong><\/em><br \/>\n<em><strong> END;<\/strong><\/em><\/p>\n<p><em><strong>DBMS_OUTPUT.put_line(&#8216;Line : |&#8217; || lv_text || &#8216;|&#8217;);<\/strong><\/em><\/p>\n<p><em><strong>UTL_FILE.fclose(lv_file_id);<\/strong><\/em><br \/>\n<em><strong> END;<\/strong><\/em><\/p><\/blockquote>\n<p>Come si vede il package \u00e8 molto semplice e consente di poter eseguire tutte le operazioni di cui si abbisogna senza grandi difficolt\u00e0.<\/p>\n<blockquote><p><em><strong>URL di<\/strong><\/em><strong> riferimento<\/strong><\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<ul>\n<li>Semplice <a title=\"articolo\" href=\"http:\/\/www.oracle-base.com\/articles\/9i\/utl_file-random-access-of-files-9i.php\" target=\"_blank\">articolo<\/a> in inglese su UTL_FILE<\/li>\n<li>Indicazioni sulle Directory di Oracle sono presenti su questo <a title=\"link\" href=\"http:\/\/www.adp-gmbh.ch\/ora\/sql\/create_directory.html\" target=\"_blank\">link<\/a> e su questa <a href=\"http:\/\/www.dba-oracle.com\/t_oracle_create_directory.htm\" target=\"_blank\">URL<\/a>.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<div class=\"clearfix\"><span class='ldc-ul_cont' onclick=\"alter_ul_post_values(this,'153','like')\" >Likes<img src=\"https:\/\/artigianodelsoftware.it\/blog\/wp-content\/plugins\/like-dislike-counter-for-posts-pages-and-comments\/images\/up.png\" \/>(<span>5<\/span>)<\/span><span class='ldc-ul_cont' onclick=\"alter_ul_post_values(this,'153','dislike')\" >Dislikes<img src=\"https:\/\/artigianodelsoftware.it\/blog\/wp-content\/plugins\/like-dislike-counter-for-posts-pages-and-comments\/images\/down.png\" \/>(<span>1<\/span>)<\/span><\/div>","protected":false},"excerpt":{"rendered":"<p>Oggi tratteremo un argomento molto semplice. Si tratta della gestione dei file da parte di Oracle. Oracle consente di poter leggere\/scrivere dei file attraverso un package standard:\u00a0UTL_FILE;\u00a0che mette a disposizione tutti i metodi necessari per poter eseguire qualsiasi operazione sui<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","footnotes":""},"categories":[19,20,21],"tags":[],"_links":{"self":[{"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/posts\/153"}],"collection":[{"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/comments?post=153"}],"version-history":[{"count":0,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/posts\/153\/revisions"}],"wp:attachment":[{"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/media?parent=153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/categories?post=153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/tags?post=153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}