5
給定指向Web服務器上託管文件的URL,是否可以將該URL的內容讀取到clob中?如果是這樣,怎麼樣?將文件加載到clob中
給定指向Web服務器上託管文件的URL,是否可以將該URL的內容讀取到clob中?如果是這樣,怎麼樣?將文件加載到clob中
下面是一個接受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>
這是很透徹我的朋友。我非常感謝幫助。 – JDS 2010-05-12 14:34:53
我無法測試代碼,但解決方案看起來非常有前途。 – migu 2011-11-15 08:51:43