2010-05-11 61 views
5

給定指向Web服務器上託管文件的URL,是否可以將該URL的內容讀取到clob中?如果是這樣,怎麼樣?將文件加載到clob中

回答

6

下面是一個接受URL並將其內容加載到表中的過程。

使用UTL_HTTP.GET_PIECES()檢索網頁文件。這將返回一個字符串數組。如果您正在防火牆後工作,則需要聲明您的代理。 Find out more about UTL_HTTP

CLOB爭吵使用DBMS_LOB功能的各種位。該過程聲明一個臨時的lob變量,將UTL_HTTP數組的片段追加到它,然後最終將其插入到一個表中。 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> 

如果像我一樣,你在11g中,您需要將網址添加到訪問控制列表,否則該請求將被阻止。 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> 

增加對StackOverflow上的URL到我的ACL後,我可以將文件現在插入我的表:

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

這是很透徹我的朋友。我非常感謝幫助。 – JDS 2010-05-12 14:34:53

+0

我無法測試代碼,但解決方案看起來非常有前途。 – migu 2011-11-15 08:51:43