2010-05-11 4 views

Répondre

6

Voici une procédure qui prend une URL et charge son contenu dans une table.

Le fichier Web est récupéré à l'aide de UTL_HTTP.GET_PIECES(). Cela retourne un tableau de chaînes. Si vous travaillez derrière un pare-feu, vous devrez déclarer votre proxy. Find out more about UTL_HTTP.

La querelle CLOB utilise divers bits de la fonctionnalité DBMS_LOB. La procédure déclare une variable lob temporaire, y ajoute les éléments du tableau UTL_HTTP, puis l'insère finalement dans une table. Find out more about DBMS_LOB.

SQL> create or replace procedure pop_file_from_url 
    2  (p_url in varchar2) 
    3 is 
    4  tc clob; 
    5  lv_web_page utl_http.html_pieces; 
    6 begin 
    7 
    8  dbms_lob.createtemporary(tc, true); 
    9  dbms_lob.open(tc, dbms_lob.lob_readwrite); 
10 
11  lv_web_page := utl_http.request_pieces (p_url); 
12 
13  for i in 1..lv_web_page.count() 
14  loop 
15   dbms_lob.writeappend(tc, length(lv_web_page(i)) ,lv_web_page(i)); 
16  end loop; 
17 
18  insert into t23 values (1, tc); 
19 
20  dbms_lob.close(tc); 
21  dbms_lob.freetemporary(tc); 
22 
23 end pop_file_from_url; 
24/

Procedure created. 

SQL> 

Si, comme moi, vous êtes sur 11g, vous devrez ajouter l'URL à une liste de contrôle d'accès, sinon sera bloqué la demande. Find out more about ACLs.

SQL> exec pop_file_from_url('stackoverflow.com') 
BEGIN pop_file_from_url('stackoverflow.com'); END; 

* 
ERROR at line 1: 
ORA-29273: HTTP request failed 
ORA-06512: at "SYS.UTL_HTTP", line 1674 
ORA-24247: network access denied by access control list (ACL) 
ORA-06512: at "APC.POP_FILE_FROM_URL", line 11 
ORA-06512: at line 1 


SQL> 

Après avoir ajouté l'URL StackOverflow à mon ACL je peux maintenant insérer le fichier dans ma table:

SQL> exec pop_file_from_url('stackoverflow.com') 

PL/SQL procedure successfully completed. 

SQL> select id, dbms_lob.getlength(txt) 
    2 from t23 
    3/

     ID DBMS_LOB.GETLENGTH(TXT) 
---------- ----------------------- 
     1     208226 

SQL> 
+0

C'était très complet mon ami. J'apprécie vraiment l'aide. – JDS

+0

Je n'ai pas encore pu tester le code, mais la solution semble très prometteuse. – migu

Questions connexes