在oracle中提供了許多內(nèi)置的程序包,它們用于擴(kuò)展數(shù)據(jù)庫(kù)的功能。在開發(fā)應(yīng)用程序時(shí),可以利用這些程序包。數(shù)據(jù)庫(kù)用戶sys擁有oracle提供的所有程序包。他們被定義為共有同義詞,并將執(zhí)行權(quán)限授予了public用戶組,任何用戶都可以訪問(wèn)它們。其中DBMS_XMLQUERY包用于將查詢結(jié)果轉(zhuǎn)換為XML格式,DBMS_LOB程序包包含雨處理大型對(duì)象的過(guò)程和函數(shù)。下面我們看一下DBMS_XMLQUERY和DBMS_LOB的用法:
為永福等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及永福網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、永福網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
SQL DECLARE
result CLOB;
xmlstr VARCHAR2(32767);
line VARCHAR2(2000);
line_no INTEGER :=1;
BEGIN
result :=DBMS_XMLQUERY.getXml('select empno,empname from employee');
xmlstr :=DBMS_LOB.SUBSTR(result,32767);
LOOP
EXIT WHEN xmlstr IS NULL;
line :=SUBSTR(xmlstr,1,INSTR(xmlstr,CHR(10)-1));
DBMS_OUTPUT.PUT_LINE(line_no || ':' || line);
xmlstr :=SUBSTR(xmlstr,INSTR(xmlstr,CHR(10)+1));
line_no :=line_no + 1;
END LOOP;
END;
在上面的例子中我們聲明了一個(gè)CLOB數(shù)據(jù)類型的result變量,以及VARCHAR2類型的xmlstr和line兩個(gè)變量。其中,getXml函數(shù)用于將查詢結(jié)果轉(zhuǎn)換為XML格式,SUBSTR函數(shù)檢索子字符串,32767值指定要從CLOB數(shù)據(jù)類型讀取的最大字節(jié)數(shù)。檢索到的字符串存儲(chǔ)xmlstr變量中。LOOP塊循環(huán)執(zhí)行,每次從xmlstr中讀取一行。INSTR函數(shù)返回一個(gè)字符串在另一個(gè)字符串首次出現(xiàn)的位置。在此,該函數(shù)返回?fù)Q行符在字符串中的位置,直到遇到下一行。
大家覺得例子的結(jié)果能不能讀出我們預(yù)期的結(jié)果呢?試試就知道了!?。?/p>
結(jié)果如下:
?xml version='1.0'?
ROWSET
ROW num="1"
EMPNOE001/EMPNO
EMPNAMEJane/EMPNAME
/ROW
ROW num="2"
EMPNOE002/EMPNO
EMPNAMEJohn/EMPNAME
/ROW
ROW num="3"
EMPNOE003/EMPNO
EMPNAMEJoe/EMPNAME
/ROW
/ROWSET
以下操作在
Oracle9i
、10g版本成功步驟一:創(chuàng)建存放XML文件的目錄對(duì)象SQLcreateorreplacedirectoryexp_diras'/opt';/--注意此目錄要有oracle用戶的寫權(quán)限步驟二:創(chuàng)建過(guò)程生成
xml文件
的主過(guò)程SQLcreateorreplaceproceduretable2xml(result
inoutnocopyclob,
導(dǎo)出過(guò)程基本上就是注釋掉不想顯示的項(xiàng),如“PDF、Powerpoint 2007+、Web Archive”,并把Data下面的CSV格式子項(xiàng)移出來(lái)。
然后在web界面中點(diǎn)擊“管理”-“重新加載文件和元數(shù)據(jù)” 無(wú)須重啟即可生效。另外默認(rèn)的xml文件沒有格式,請(qǐng)?jiān)诰W(wǎng)上隨便找一個(gè)在線xml格式化 工具格式化一下。
假設(shè)你的窗體上有一個(gè)按鈕,在設(shè)計(jì)器中雙擊按鈕,寫以下代碼:using
(OracleDataAdapter
=
new
OracleDataAdapter
("select
*
from
表","你的連接字符串")){DataTable
dt
=
new
DataTable("表名");adapter.Fill(dt);dt.WriteXml("C:\\xxx.xml");
//導(dǎo)出到C盤}不過(guò)Oracle不用SqlDataAdapter——1)右鍵你的程序“Add
References……”(灰色文件夾),然后添加System.Data.OracleClient。2)在程序中引入“using
System.Data.OracleClient”。3)編碼如下:
請(qǐng)檢查一下你 oracle init.ora 或 spfile 中參數(shù) UTL_FILE_DIR 是否正確設(shè)置了。這個(gè)參數(shù)設(shè)置的目錄必須存在而且必須是 oracle 用戶有讀寫權(quán)限的。
檢查該參數(shù)的值的簡(jiǎn)單辦法:
在數(shù)據(jù)庫(kù)服務(wù)器上執(zhí)行:
sqlplus /nolog
connect /as sysdba
show parameter utl_file_dir