Posted on 2005-02-03 21:05
海天一鷗 閱讀(155)
評論(0) 編輯 收藏 所屬分類:
Java數據庫技術
在Oracle9i中, SQL*Plus現在不僅能接受文件名當作腳本地址,還可以接受HTTP或是FTP地址當作腳本地址來源。舉例來說,通過“@http://www.mycorp.com/sql/setup.sql”這條命令就可以從這個網址裝載SQL腳本,然后在當前的運行環境下運行。而“@@”命令能知道它當前正在從一個URL上運行,所以會從相同的位置裝載腳本。舉例來說,如果上述裝載的腳本包含以下代碼的話,那么每個SQL腳本將根據給定的URL被裝載。
REM - setup script
@@tables.sql
@@indexes.sql
@@code.sql
有些DBA希望集中維護位于一個遠程位置并且可以被不同位置的數據庫執行的腳本,這對于他們來說是有價值的。這對于那些因沒有SQL*Net而不能連接數據庫,但能通過HTTP使用腳本的客戶是特別有用的。
通過HTTP協議,腳本可以根據Web服務器的輸入參數產生。舉例來說,http://www.mycorp.com/cgi-bin/setup.pl?host=bart就將參數host=bart傳遞給CGI-BIN腳本。SQL *Plus有其單獨的參數傳遞工具。
在腳本被裝載之后,這些參數被綁定起來用于定義參數。命令@@tables.sql mytablespace將從相同的相關目錄裝載“tables.sql”這個腳本,然后mytablespace 將被綁定到SQL * Plus的&1參數上。 對于@URL在功能上有一個差別,那就是.sql擴展是不可選擇的
在Oracle8i中模擬@URL
這個特征的一個缺點就是他好像不支持HTTP代理。腳本只有通過直接的連接才能夠被裝載。在Oracle8i中的一個變通的通過使用代理進入或者是模擬這個功能實現的腳本如下:
REM -- http_at.sql
set feedback off
set linesize 255
set serveroutput on size 64000
set trimspool on
spool test.sql
declare
l_pieces utl_http.html_pieces;
l_piece varchar2(2000);
l_url varchar2(2048) := '&1';
l_maxline integer := 255;
l_index integer;
l_stub varchar2(255);
l_proxy varchar2(2048) := 'proxy.mycomp.com:8000';
begin
l_pieces := utl_http.request_pieces(l_url,1000,l_proxy);
for i in l_pieces.first .. l_pieces.last loop
l_piece := l_pieces(i);
while length(l_piece) > l_maxline loop
l_stub := substr(l_piece,1,l_maxline);
l_index := length(l_stub);
while l_index > 0 and substr(l_stub,l_index,1) != chr(10) loop
l_index := l_index - 1;
end loop;
l_stub := substr(l_piece,1,l_index-1);
l_piece := substr(l_piece,l_index+1);
dbms_output.put_line(l_stub);
end loop;
dbms_output.put_line(l_piece);
end loop;
end;
/
spool off;