人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統(tǒng)下載站 > 技術開發(fā)教程 > 詳細頁面

Oracle XQuery查詢、構建與轉換XML(2)

Oracle XQuery查詢、構建與轉換XML(2)

更新時間:2022-10-18 文章作者:未知 信息來源:網(wǎng)絡 閱讀次數(shù):

查詢 Oracle XML DB 信息庫中的 XML 數(shù)據(jù)

為訪問 Oracle XML DB 信息庫中存儲的 XML 數(shù)據(jù),Oracle XQuery 引入了 fn:doc 和 fn:collection XQuery 函數(shù)。使用 fn:doc,您可以查詢 XML 信息庫中存儲的單個 XML 文檔,而 fn:collection 使您可以訪問同一信息庫文件夾中存儲的多個 XML 文檔。

正如本文之前(參閱使用關系數(shù)據(jù)構建 XML部分)介紹的示例所演示,使用 fn:doc 非常簡單直接。它獲取表示信息庫文件資源 (URI) 的字符串并返回該 URI 指向的文檔。要了解 fn:collection XQuery 函數(shù)的作用,同一文件夾中至少應有兩個信息庫文件。如果已經(jīng)運行了列表 1 中的代碼,則已經(jīng)創(chuàng)建了 /public/employees 信息庫文件夾并在其中存儲了 employees.xml 文件。因此,您將需要在該文件夾中至少再創(chuàng)建一個 XML 文件,然后才能試用 fn:collection。列表 2 中的 PL/SQL 代碼基于 SCOTT/TIGER 演示數(shù)據(jù)庫模式的 dept 和 emp 表存儲的關系數(shù)據(jù)構建 XML,然后將生成的 XML 文檔作為 acc_dept.xml 保存到 /public/employees 信息庫文件夾。要運行列表 2 中的 PL/SQL 過程,請確保以 SCOTT/TIGER 的身份登錄。

列表 2:基于關系數(shù)據(jù)構建 XML 并將其保存到 XML 信息庫

DECLARE

XMLdoc XMLType;

BEGIN

SELECT XMLQuery(

'for $j in ora:view("SCOTT", "dept")/ROW

where $j/DEPTNO = 10

return (

{$j/DEPTNO,

$j/DNAME}

{

for $i in ora:view("SCOTT", "emp")/ROW

where $i/DEPTNO = $j/DEPTNO

return (



{$i/EMPNO,

$i/ENAME,

$i/SAL}

)}



)'

RETURNING CONTENT) INTO XMLdoc FROM DUAL;

IF(DBMS_XDB.CREATERESOURCE('/public/employees/acc_dept.xml', XMLdoc)) THEN

DBMS_OUTPUT.PUT_LINE('Resource is created');

ELSE

DBMS_OUTPUT.PUT_LINE('Cannot create resource');

END IF;

COMMIT;

END;

/

此時,/public/employees 信息庫文件夾應包含兩個文件:acc_dept.xml(由列表 2 中的 PL/SQL 代碼生成)和 employees.xml 文件(由列表 1 中的代碼生成)。由于這些 XML 文檔存儲在同一信息庫文件夾中,因此可以使用 fn:collection 函數(shù)訪問兩個 XML 文檔中存儲的員工信息。然而,盡管這些 XML 文檔均包含員工 XML 元素(這些元素實際上具有相同結構),但 XML 文檔本身的結構迥然不同。在 employees.xml 中,文檔根元素為 EMPLOYEES,而 acc_dept.xml 將 DEPARTMENT 用作根元素。要解決此問題,可以通過 XQuery 使用 XPath // 構造,從而導航到 XML 文檔中的某個節(jié)點,而不必指定該節(jié)點的確切路徑。以下示例演示了如何在 XQuery 表達式中使用 XPath // 構造:

SELECT XMLQuery(

'for $i in fn:collection("/public/employees")//EMPLOYEE

where $i/SAL >= 5000

order by $i/ENAME

return;

$i'

RETURNING CONTENT) FROM DUAL;

該構造應生成以下輸出:



102

De Haan

17000





7839

KING

5000





100

King

24000





101

Kochhar

17000

您可以看到,以上輸出包含從 employees.xml 和 acc_dept.xml 中獲取的員工 XML 元素,這些元素表示薪酬大于或等于 5,000 美元的員工。

將 XML 分解為關系數(shù)據(jù)

如果應用程序處理關系數(shù)據(jù)而非 XML,而您需要訪問的數(shù)據(jù)以 XML 格式存儲,則將 XML 分解為關系數(shù)據(jù)可能會非常有用。繼續(xù)進行上一部分的示例,您可以使用 SQL 函數(shù) XMLTable 將員工 XML 元素分解為虛擬表的單個列,如下所示:

SELECT emps.empno,emps.ename, emps.sal FROM 

XMLTable(

'for $i in fn:collection("/public/employees")//EMPLOYEE

where $i/SAL >= 5000

return;

$i'

COLUMNS empno NUMBER PATH '/EMPLOYEE/EMPNO',

ename VARCHAR2(30) PATH '/EMPLOYEE/ENAME',

sal NUMBER PATH '/EMPLOYEE/SAL') emps;

該查詢將生成以下輸出:

EMPNO ENAME SAL

----- -------------- ----------

7839 KING 5000

100 King 24000

101 Kochhar 17000

102 De Haan 17000


溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 通州市| 合川市| 航空| 通江县| 五指山市| 南宫市| 扎鲁特旗| 湟中县| 丹阳市| 常州市| 依安县| 衡东县| 邛崃市| 平南县| 桃园县| 鄂伦春自治旗| 大荔县| 嘉善县| 白玉县| 万盛区| 平江县| 神池县| 宝清县| 云霄县| 定结县| 无为县| 翼城县| 久治县| 枝江市| 台前县| 枣阳市| 遵化市| 明溪县| 谢通门县| 阿克苏市| 文成县| 晋宁县| 鄂州市| 奉节县| 讷河市| 旬阳县|