當前位置:首頁 » 編程語言 » oraclesqlxml

oraclesqlxml

發布時間: 2022-09-05 03:38:06

『壹』 如何理解Oracle 11g中的XML

【轉自網路】
在這篇訪談中,Peasland討論了為什麼他沒有大量利用11g中計劃的XML升級,並且談論了這樣的一個事實,即他曾經交談的很多用戶都希望下一個版本的PL/sql可以包含一種更好的方式來追蹤PL/SQL呼叫棧。Peasland還為那些准備 考取10g的Oracle認證專家考試的人們提出了一些建議,還為資料庫新手和老手們,以及想要正確搞定Database 10g的人們提出了一些關鍵詞。 Oracle說他的旗艦資料庫管理系統的下一個版本——Oracle Database 11g——包括新的有關XML升級。他們把注意力集中在XML DB上,還包括了一個新的XML二進制數據和新的XML索引。這些種類的更新重要嗎?為什麼或者為什麼不呢?Brian Peasland:我們不能簡單地在一個表中查尋一點XML數據,並且與其它的相比又快又簡單。通常這樣做意味著你必須把數據散開。我從來不喜歡把XML放到資料庫裡面,我也從來沒有必要這么做。我確實知道有些人需 要這樣做,並且這樣做也對他們特殊的應用程序有意義。 但是他們存儲XML更像是有些人在資料庫中存儲Word文檔或者存放.wav文件。他們沒有把它作為 以後可供查詢的共有數據來存儲。他們想要真正地存儲XML為完整的文件,不是一段一段的數據。 為什麼你提到的那些人要把XML作為完整文件存儲? Peasland:例如,新版本的微軟Office將會把XML作為它的標准格式。取代原先資料庫中使用的Word類型的資本文件格式,也許他 們想要在資料庫中將這種新的XML格式作為文檔存儲。雖然,他們可以運行類似Oracle文本這樣的工具來進行快速文檔的快速搜索。但是這是一種與我所見 到的一些人想要嘗試的方式——他們想要將綜合數據,例如員工列表,以XML格式存儲在資料庫中——完全不同的使用。對我來說,那些代表了項目實體的屬性和 數據行應該存儲在一個關系表中。 你希望在Database 11g或者其它Oracle的未來版本的資料庫管理系統中,PL/SQL發生什麼變化? Peasland:許多人這些天都在詢問一種更簡單的方式來追蹤PL/SQL呼叫棧。實話實說,我也不確定為什麼,但是我確實遇到了想要這樣做 的人。一個傢伙不禁想要追蹤,還想要能夠存儲它。DBMS_DEBUG的bug工具已經存在很長一段時間了,用它,你可以追蹤你的PL/SQL呼叫棧,但 是它非常難以使用。SQL開發人員已經在這方面進行努力了。但是資料庫中有一些這樣的東西還是比較好的。 你個人還希望看到什麼其它的PL/SQL變化? Peasland:我曾期待的一個變化就是在SQL Server中真的可以讓某些事情變得非常簡單,但是在Oracle的PL/SQL中就不是這樣了。在SQL Server中,我可以做一個存儲過程,讓它剛好能夠吐出那些數據,就好像那是查詢自身一樣。在Oracle中,為了完成這一點,你必須用特殊的數據類型 作為你的參數然後再把它查詢出來。你必須使用Ref游標或者其它類似的什麼東西。這有一點麻煩,但是如果你可以做的話,也是不錯的。其他的平台允許你這樣 做,但是Oracle就不可以。 你對SQL Developer有什麼看法,相比較類似產品而言? Peasland:我喜歡SQL Developer的一個原因就是我能夠在SQL Developer中做一些快速的查詢,方式與在SQL Server中一樣。SQL Developer的能力可以解釋我的查詢的部分內容,但是讓人會把他留在那裡,留給那些不注釋它們的實例再次呼叫,這種一種用於不同測試目標的調試和運 行查詢的良好方式——絕對不是用於產品使用,而是一種開發者的工具。 你的網站包括了一些注意文檔,用來幫助人們通過Oracle 10g的Oracle認證專家考試。你給那些計劃通過考試的人有些什麼建議? Peasland:我要告訴大家的一件大事就是,一,閱讀有關新特性的文檔,因為幾乎有關考試的所有內容都在文檔中。這非常重要。還有我了解人 們都害怕文檔,但是我喜歡這種方式,因為我的大部分問題的答案(作為SearchOracle.com的網站專家)都是從文檔中尋找到正確答案的。閱讀文檔,因為它可以讓你熟悉此類事情。另外一件事情就是,練習你學到的,因為當你練習的時候,你就會開始學習一些新特性工作的進出方式。然後,主動嘗試去打破 一些東西。很明顯,你會希望在測試系統上做這件事情,這個系統只有你可以訪問,其他人都無法訪問,因為你不想打擾其他任何人的工作。在嘗試打破一些東西的 時候,你會學習到新的特性。 你的網站還介紹了一些有關違反策略和保衛Oracle 10g安全的信息。有沒有什麼好辦法可以確保Oracle 10g正常啟動? Peasland:有一項針對每個人的策略侵害,即使你是直接在機器外安裝Oracle,就是有一些供應的包可以對公眾開放,這意味著資料庫中 的每個人都可以使用它們。擁有可以使用這些包的能力會導致安全漏洞。例如,有這樣的一個包叫做UTL_File。它讓存儲過程中的某些人可以與資料庫所在 的文件系統進行交互。你也許不想要寫入文件,因為這樣會帶來潛在的危險。還有,一些著名的Oracle專家明確指出,像UTL_File這樣的東西會讓人 們探測資料庫。我們聽說類似這樣的安全漏洞總是存在的,它也不是Oracle獨有的。資料庫中的用戶應該有最低許可權的概念,意思是他們應該只擁有完成任務 所需要的最低限度的許可權。

『貳』 在Oracle表數據和xml文件間相互導入導出的PL/SQL 過程

ORA-31001: 資源句柄或路徑名 "F:\oracle\xml\people.xml" 無效
ORA-06512: 在 "SYS.XDBURITYPE", line 11
ORA-06512: 在 "XDB.DBMS_XSLPROCESSOR", line 142
ORA-29280: 目錄路徑無效
ORA-29280: 目錄路徑無效
ORA-29280: 目錄路徑無效
ORA-06512: 在 "XDB.DBMS_XMLPARSER", line 119
ORA-06512: 在 "SYS.XML2DB", line 34
ORA-06512: 在 line 2
問題補充:F:\oracle\xml\people.xml 這個路徑沒錯,的確有
而且在別的過程裡面

『叄』 mybatis里的xml中的寫添加的sql語句,怎麼使用oracle資料庫的序列

--OracleSEQUENCE序列語法:
CREATESEQUENCE序列名
[INCREMENTBYn]
[STARTWITHn]
[{MAXVALUE/MINVALUEn|NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHEn|NOCACHE}];
示例:
CREATESEQUENCEsq_test--序列名
INCREMENTBY1--每次加幾個
STARTWITH1--從1開始計數
MAXVALUE9999999--最大值9999999
NOCYCLE--一直累加,不循環
NOCACHE;

SELECTsq_test.NEXTVALFROMDUAL;

可以使用sequence的地方:

--不包含子查詢、snapshot、VIEW的SELECT語句
--INSERT語句的子查詢中
--NSERT語句的VALUES中
--UPDATE的SET中

可以看如下例子:

INSERTINTOtable_nameVALUES(sq_test.nextval,'CLERK',1200,SYSDATE);

『肆』 從oracle資料庫查詢數據生成xml,java解析xml文件的數據批量插入到oracle資料庫(用SAX解析)

我自己前段時間寫的有事就問
資料庫建了一個表study
id student class teacher age 這5個欄位
package com.sql.xml;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
//導出數據存入XML
public class ReadDb {
public static void main(String args[]){
//連接資料庫
try{
//資料庫連接
String url="jdbc:oracle:thin:@10.0.3.18:1521:hxtest18";
String classforname="oracle.jdbc.driver.OracleDriver";
String usename="yong";
String password="password";
Class.forName(classforname);
Connection con=DriverManager.getConnection(url,usename,password);
Statement sta=con.createStatement();
//查詢數據
ResultSet result=sta.executeQuery(
"SELECT * FROM study");
//創建根節點
Document document=DocumentHelper.createDocument();
Element studyInfo=DocumentHelper.createElement("studyInfo");
document.setRootElement(studyInfo);
//Element studyInfo=document.addElement("studyInfo");
//當有值時查詢
while(result.next()){
//增加每個節點
Element study=studyInfo.addElement("study");
Element id=study.addElement("id");
Element student=study.addElement("student");
Element classe=study.addElement("class");
Element teacher=study.addElement("teacher");
Element age=study.addElement("age");
//將資料庫值通過SETTEXT為XML值
id.setText(result.getString("id"));
student.setText(result.getString("student"));
//System.out.println(id.getText());
classe.setText(result.getString("class"));
teacher.setText(result.getString("teacher"));
age.setText(result.getString("age"));
}
//將樹導出到文件中:兩種輸出方法
XMLWriter write=new XMLWriter(new FileOutputStream(new File("studyInfo.xml")));
write.write(document);
write.close();

}catch(Exception e){
e.printStackTrace();
}
}

}

插入資料庫,改了幾個條件
bookstore.xml文件如下
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book has="100">
<bname>資料庫</bname>
<price>33.80元</price>
<date>2009-10-1</date>
</book>
<book has="95">
<bname>三國演義</bname>
<price>40.00元</price>
<date>2005-1-7</date>
</book>
<book has="86">
<bname>西遊記</bname>
<price>30.00元</price>
<date>2004-3-8</date>
</book>
<cd have="15">
<id>1</id>
<cname>beyound</cname>
<owner>小黎</owner>
</cd>
<cd have="17">
<id>2</id>
<cname>kugou</cname>
<owner>小強</owner>
</cd>
</bookstore>

解析如下
package com.sql.xml;
import java.io.File;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.OutputFormat;

//XML的解析與轉換後存入資料庫
public class Fenkai {
public static void main(String args[]){
String sql,BNAME=null,PRICE=null,DAT=null;//定義資料庫表段
String sqlatt,CNAME=null,ID=null,OWNER=null;
//讀取xml文件
SAXReader reader=new SAXReader();
File file=new File("bookstore.xml");
try{
//資料庫連接
String url="jdbc:oracle:thin:@10.0.3.18:1521:hxtest18";
String classforname="oracle.jdbc.driver.OracleDriver";
String usename="yong";
String password="password";
Class.forName(classforname);
Connection con=DriverManager.getConnection(url,usename,password);
//解析xml文件
Document document=reader.read(file);
Element root=document.getRootElement();//根節點
System.out.println("輸出根節點:"+root.getName());
//下面用迭代得到子節點和孫節點
for(Iterator child=root.elementIterator();child.hasNext();){
Element childEle=(Element)child.next();
System.out.println("子:"+childEle.getName());
System.out.println("孫:");
for(Iterator grand=childEle.elementIterator();grand.hasNext();){
Element grandEle=(Element)grand.next();
System.out.println(grandEle.getName()+"值:"+grandEle.getText());
//轉換數據
while(grandEle.getText().equals("資料庫")){
grandEle.setText("001");
}
while(grandEle.getText().equals("三國演義")){
grandEle.setText("002");
}
while(grandEle.getText().equals("西遊記")){
grandEle.setText("003");
}
while(grandEle.getText().equals("beyound")){
grandEle.setText("004");
}
while(grandEle.getText().equals("kugou")){
grandEle.setText("005");
}

}}
//得到各節點值插入資料庫

for(Iterator it= root.elementIterator("book");it.hasNext();){
Element ch=(Element)it.next();
BNAME=ch.elementText("bname");
PRICE=ch.elementText("price");
DAT=ch.elementText("date");

// while(childEle.getName().equals("cd")){}

sql="insert into book values('"+BNAME+"','" +PRICE
+"','"+DAT+"')";
//sql="select * from book";//加入本語句運行不改變數據表
//執行
con.createStatement().executeUpdate(sql);}
for(Iterator itt= root.elementIterator("cd");itt.hasNext();){
Element cht=(Element)itt.next();
CNAME=cht.elementText("cname");
ID=cht.elementText("id");
OWNER=cht.elementText("owner");
sqlatt="insert into cd values('"+CNAME+"','" +ID
+"','"+OWNER+"')";
//sqlatt="select * from cd";
con.createStatement().executeUpdate(sqlatt);}

//將轉換後文件存入txt
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("gbk");
XMLWriter writer = new XMLWriter( new FileWriter(new File("bookchange.txt")),format);
writer.write(document);
writer.close();
System.out.println(document.asXML());//列印改變後的樹
}catch(Exception e){
e.printStackTrace();
System.out.println("有錯啊!");
}
}

}

『伍』 如何使用sqlloader導入xml文件到Oracle資料庫

在Oracle表數據和xml文件間相互導入導出的PL/SQL過程
學校里要求做個題,題目要求是寫出將已知格式xml文件中的數據導入Oracle資料庫、把資料庫中的數據導出成xml文件的過程。
已知格式xml文件如下:

<?xmlversion="1.0"?>
<PEOPLE>
<PERSONPERSONID="E01">
<NAME>TonyBlair</NAME>
<ADDRESS>10DowningStreet,London,UK</ADDRESS>
<TEL>(061)98765</TEL><FAX>(061)98768</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSONPERSONID="E02">
<NAME>BillClinton</NAME>
<ADDRESS>WhiteHouse,USA</ADDRESS>
<TEL>(001)640098765</TEL><FAX>(001)640098769</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSONPERSONID="E03">
<NAME>TomCruise</NAME>
<ADDRESS>57JumboStreet,NewYork,USA</ADDRESS>
<TEL>(001)450067859</TEL><FAX>(001)450067895</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSONPERSONID="E04">
<NAME>LindaGoodman</NAME>
<ADDRESS>78CraxLane,London,UK</ADDRESS>
<TEL>(061)5456789</TEL><FAX>(061)5456772</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
</PEOPLE>

於是寫出過程如下:
--建表
CREATETABLEPEOPLE
(
PERSONIDVARCHAR2(10)PRIMARYKEY,
NAMEVARCHAR2(20),
ADDRESSVARCHAR2(60),
TELVARCHAR2(20),
FAXVARCHAR2(20),
EMAILVARCHAR2(40)
);
--從xml文件載入數據保存到資料庫的過程
createorreplaceprocerexml2db(xmlfilevarchar2)as
pxmlparser.Parser;
docxmldom.DOMDocument;
nxmldom.DOMNode;
nlxmldom.DOMNodeList;
lennumber;
--根據PERSON結點生成插入SQL語句的過程
functioninsertsql(nodexmldom.DOMNode)returnvarchar2
is
nxmldom.DOMNode;
nlxmldom.DOMNodeList;
lennumber;
nnmxmldom.DOMNamedNodeMap;
isqlvarchar2(200);
begin
--取得PERSON結點所有屬性
nnm:=xmldom.getAttributes(node);
isql:='insertintopeoplevalues(';
isql:=isql||'''';
--取得所有屬性中的第一個屬性,即"PERSONID",並拼接到SQL語句中
isql:=isql||xmldom.getNodeValue(xmldom.item(nnm,0));
isql:=isql||'''';
--取得PERSON結點下的所有結點,准備遍歷
nl:=xmldom.getChildNodes(node);
len:=xmldom.getLength(nl);
foriin0..len-1loop
--取出第i個結點
n:=xmldom.item(nl,i);
isql:=isql||',';
isql:=isql||'''';
--將結點的文本值取出並拼接到SQL語句中
isql:=isql||xmldom.getNodeValue(xmldom.getFirstChild(n));
isql:=isql||'''';
endloop;
isql:=isql||')';
returnisql;
endinsertsql;
begin
p:=xmlparser.newParser;
xmlparser.parse(p,xmlfile);
--轉換xml文件成DOM對像
doc:=xmlparser.getDocument(p);
xmlparser.freeParser(p);
--取出所有PERSON元素
nl:=xmldom.getElementsByTagName(doc,'PERSON');
len:=xmldom.getLength(nl);
--清空people表的內容
deletefrompeople;
foriin0..len-1loop
--取出第i個PERSON元素
n:=xmldom.item(nl,i);
--執行插入該PERSON元素所用的SQL語句
executeimmediateinsertsql(n);
endloop;
commit;
xmldom.freeDocument(doc);
endxml2db;
/
--將資料庫中的數據導出成xml文件的過程
createorreplaceproceredb2xml(xmlfilevarchar2)as
docxmldom.DOMDocument;
retxmldom.DOMNode;
peoplenodexmldom.DOMNode;
--遍歷整個people表的游標
-------------
--將people表中一行記錄轉換為元素
--並插入到DOM文檔對像根結點PEOPLE下的過程
procereaddperson(docxmldom.DOMDocument,peoplexmldom.DOMNode,
v_pidvarchar2,v_namevarchar2,v_addrvarchar2,
v_telvarchar2,v_faxvarchar2,v_emailvarchar2)
is
personelemxmldom.DOMElement;
personnodexmldom.DOMNode;
itemelemxmldom.DOMElement;
itemnodexmldom.DOMNode;
textxmldom.DOMText;
begin
--創建PERSON結點
personelem:=xmldom.createElement(doc,'PERSON');
--設置PERSONID屬性
xmldom.setAttribute(personelem,'PERSONID',v_pid);
personnode:=xmldom.appendChild(peoplenode,xmldom.makeNode(personelem));
--向PERSON結點中添加NAME元素
itemelem:=xmldom.createElement(doc,'NAME');
--將NAME結點添加到PERSON結點中
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
--創建文本結點
text:=xmldom.createTextNode(doc,v_name);
--將文本結點添加到NAME結點下,以構成完整NAME元素
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON結點中添加ADDRESS元素
itemelem:=xmldom.createElement(doc,'ADDRESS');
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text:=xmldom.createTextNode(doc,v_addr);
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON結點中添加TEL元素
itemelem:=xmldom.createElement(doc,'TEL');
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text:=xmldom.createTextNode(doc,v_tel);
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON結點中添加FAX元素
itemelem:=xmldom.createElement(doc,'FAX');
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text:=xmldom.createTextNode(doc,v_fax);
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON結點中添加EMAIL元素
itemelem:=xmldom.createElement(doc,'EMAIL');
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text:=xmldom.createTextNode(doc,v_email);
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
endaddperson;
begin
--創建一個新DOM文檔對像
doc:=xmldom.newDOMDocument;
--為文檔添加根結點PEOPLE
peoplenode:=xmldom.makeNode(xmldom.createElement(doc,'PEOPLE'));
ret:=xmldom.appendChild(xmldom.makeNode(doc),peoplenode);
--使用游標遍歷people中的每行,生成每一行對應的PERSON元素並添加到PEOPLE根結點中
forv_rowincur_peopleloop
addperson(doc,peoplenode,v_row.personid,v_row.name,
v_row.address,v_row.tel,v_row.fax,v_row.email);
endloop;
--將結果寫入指定文件
xmldom.writeToFile(doc,xmlfile);
xmldom.freeDocument(doc);
enddb2xml;

『陸』 用xml如何同時配置兩個資料庫sql server和oracle呢,求實例參考,相關博文鏈接

這個自己定義一個事務就行了。
咱們一般平時開發的時候,可能很少定義事務。
經常使用默認的SQLCA,這個SQLCA都是 你連接的主資料庫,同樣的,你在定義一個transaction,連接的參數,參照SQLCA的參數,把參數都設置成另一個資料庫,就可以了。

『柒』 oracle的PL/SQL中如何根據節點名稱直接獲取xml某個節點的值

用XPath比較簡單點.也可以用xmldom.
xmltype('<?xml version="1.0" encoding="GBK"?>
<SERVICE>
<IDA_SVR_USERBILL>
<CALL_METHOD>queryProcessStepList</CALL_METHOD>
</IDA_SVR_USERBILL>
</SERVICE>').extract('//CALL_METHOD/child::text()').getstringval()
測試:
SELECT xmltype('<?xml version="1.0" encoding="GBK"?>
<SERVICE>
<IDA_SVR_USERBILL>
<CALL_METHOD>queryProcessStepList</CALL_METHOD>
</IDA_SVR_USERBILL>
</SERVICE>').extract('//CALL_METHOD/child::text()').getstringval()
FROM al;

如果要xmldom
你可以參考我這個報表的寫法:
http://www.skyz.cn/?p=364

熱點內容
安卓位置模擬器哪個好用 發布:2025-01-14 20:51:19 瀏覽:386
廣西的雲伺服器 發布:2025-01-14 20:51:17 瀏覽:898
電腦怎麼查卡配置 發布:2025-01-14 20:01:29 瀏覽:27
手機怎麼控制伺服器 發布:2025-01-14 19:58:46 瀏覽:307
php難招 發布:2025-01-14 19:06:07 瀏覽:489
sublime編譯php 發布:2025-01-14 18:57:16 瀏覽:307
雲計算伺服器是什麼 發布:2025-01-14 18:56:22 瀏覽:44
vip域名查詢ftp 發布:2025-01-14 18:46:48 瀏覽:116
格式化linux 發布:2025-01-14 18:35:14 瀏覽:595
如何進入安卓原生市場 發布:2025-01-14 18:22:06 瀏覽:560