Webサーバーでホストされているファイルを指すURLが与えられた場合、そのURLの内容をCLOBに読み込むことは可能ですか?もしそうなら、どのように?
3639 次
1 に答える
7
これは、URLを取得し、その内容をテーブルにロードする手順です。
Webファイルはを使用して取得されますUTL_HTTP.GET_PIECES()
。これは文字列の配列を返します。ファイアウォールの背後で作業している場合は、プロキシを宣言する必要があります。 UTL_HTTPの詳細をご覧ください。
CLOBラングリングは、DBMS_LOB機能のさまざまなビットを使用します。このプロシージャは、一時的なlob変数を宣言し、UTL_HTTP配列の一部を追加して、最後にテーブルに挿入します。 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を使用している場合は、アクセス制御リストにURLを追加する必要があります。そうしないと、リクエストがブロックされます。 ACLの詳細をご覧ください。
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>
于 2010-05-11T20:33:25.250 に答える