{"id":436,"date":"2014-10-27T12:29:29","date_gmt":"2014-10-27T12:29:29","guid":{"rendered":"http:\/\/artigianodelsoftware.wordpress.com\/?p=436"},"modified":"2014-10-27T12:29:29","modified_gmt":"2014-10-27T12:29:29","slug":"creare-una-funzione-split-con-plsql","status":"publish","type":"post","link":"https:\/\/artigianodelsoftware.it\/blog\/2014\/10\/27\/creare-una-funzione-split-con-plsql\/","title":{"rendered":"Creare una funzione split con plsql"},"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\/436?print=print\" class=\"pdfprnt-button pdfprnt-button-print\" target=\"_blank\"><\/a><\/div><blockquote>\n<h1>Funzione SPLIT in PL-SQL<\/h1>\n<\/blockquote>\n<p>Riporto un sistema molto semplice per realizzare una funzione SPLIT in PL-SQL. Si tratta di una procedura che ho trovato in questo <a href=\"http:\/\/glosoli.blogspot.it\/2006\/07\/oracle-plsql-function-to-split-strings.html\" target=\"_blank\">blog<\/a>.<\/p>\n<p>Si tratta di una funzione che, data una stringa con separatori, restityuisce l&#8217;elemento i-esimo.<\/p>\n<blockquote>\n<pre class=\"code\">create <b>or<\/b> replace <b>function<\/b> get_token(\n   the_list  <b>varchar2<\/b>,\n   the_index <b>number<\/b>,\n   delim     <b>varchar2<\/b><b>:=<\/b> ','\n)\n   <b>return<\/b><b> varchar2 <\/b><b>is<\/b>\n   start_pos <b>number<\/b>;\n   end_pos   <b>number<\/b>;\n<b>begin\n\n<\/b><b>   if<\/b> the_index <b>=<\/b> 1 <b>then<\/b>\n       start_pos <b>:=<\/b> 1;\n   <b>else<\/b>\n       start_pos <b>:=<\/b> instr(the_list, delim, 1, the_index <b>-<\/b> 1);\n       <b>if<\/b> start_pos <b>=<\/b> 0 <b>then \n<\/b><b>          return<\/b> null;\n       <b>else<\/b>\n           start_pos <b>:=<\/b> start_pos <b>+<\/b> length(delim);\n       <b>end if<\/b>;\n   <b>end if<\/b>;\n\n   end_pos <b>:=<\/b> instr(the_list, delim, start_pos, 1);\n\n   <b>if<\/b> end_pos <b>=<\/b> 0 <b>then\n<\/b><b>       return<\/b> substr(the_list, start_pos);\n   <b>else\n<\/b><b>       return<\/b> substr(the_list, start_pos, end_pos <b>-<\/b> start_pos);\n   <b>end if<\/b>;\n\n<b>end<\/b> get_token;\n<b>\/<\/b><\/pre>\n<p class=\"code\">\n<\/blockquote>\n<p class=\"code\">Si tratta di una funzione molto semplice. Il risultato \u00e8 il seguente:<\/p>\n<address class=\"code\">\n<blockquote>\n<pre class=\"code\">select\n   get_token('foo,bar,baz',1), -- 'foo'\n   get_token('foo,bar,baz',3), -- 'baz'\n   --\n   get_token('a,,b',2),        -- '' (null)\n   get_token('a,,b',3),        -- 'b'\n   --\n   get_token('a|b|c',2,'|'),   -- 'b'\n   get_token('a|b|c',4,'|')    -- '' (null)\nfrom\n   dual\n\n<\/pre>\n<\/blockquote>\n<\/address>\n<blockquote>\n<h1>Punti di attenzione<\/h1>\n<\/blockquote>\n<ul>\n<li>L&#8217;indice parte da 1 e non da 0<\/li>\n<li>Se per l&#8217;indice specificato, non \u00e8 presente alcun valore, allora non viene restituito alcun valore<\/li>\n<li>Se si fornisce un indice che non esiste (es. la stringa \u00e8 formata da 3 elementi e si richiede il 4 elemento), allora anche in questo caso, la funzione non restituisce nulla.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<blockquote>\n<h1>Suggerimenti<\/h1>\n<\/blockquote>\n<p>Potrebbe tornare utile far restituire una stringa ad hoc, qualora non venga fornito un indice non esistente nella stringa, sostituendo il\u00a0<em><strong>return null;<\/strong><\/em> con\u00a0<em><strong>return &#8216;-1&#8217;;<\/strong><\/em> in modo da distinguere la situazione in cui non venga restituito un valore da l&#8217;aver richiesto un indice non esistente.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<div class=\"clearfix\"><span class='ldc-ul_cont' onclick=\"alter_ul_post_values(this,'436','like')\" >Likes<img src=\"https:\/\/artigianodelsoftware.it\/blog\/wp-content\/plugins\/like-dislike-counter-for-posts-pages-and-comments\/images\/up.png\" \/>(<span>0<\/span>)<\/span><span class='ldc-ul_cont' onclick=\"alter_ul_post_values(this,'436','dislike')\" >Dislikes<img src=\"https:\/\/artigianodelsoftware.it\/blog\/wp-content\/plugins\/like-dislike-counter-for-posts-pages-and-comments\/images\/down.png\" \/>(<span>0<\/span>)<\/span><\/div>","protected":false},"excerpt":{"rendered":"<p>Funzione SPLIT in PL-SQL Riporto un sistema molto semplice per realizzare una funzione SPLIT in PL-SQL. Si tratta di una procedura che ho trovato in questo blog. Si tratta di una funzione che, data una stringa con separatori, restityuisce l&#8217;elemento<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","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,21,25],"tags":[52,83,88],"_links":{"self":[{"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/posts\/436"}],"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=436"}],"version-history":[{"count":0,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/posts\/436\/revisions"}],"wp:attachment":[{"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/media?parent=436"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/categories?post=436"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/tags?post=436"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}