|
本帖最后由 newkid 于 2011-11-24 02:15 编辑
jboracle1981 发表于 2011-11-22 08:50 ![]()
ABD
正确。
=================================
2011-10-8 XML
作者:Tim Hall
难度:高
我们分到一个任务,需要产生一个XML文件,里面包含employees表的数据。我们先建表并填入数据:
CREATE TABLE plch_emp (
empno NUMBER(4,0),
ename VARCHAR2(10 BYTE),
job VARCHAR2(9 BYTE),
mgr NUMBER(4,0),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2,0)
);
BEGIN
INSERT INTO plch_emp
VALUES (7369
, 'SMITH'
, 'CLERK'
, 7902
, TO_DATE ('17-DEC-80', 'DD-MON-RR')
, 800
, NULL
, 20);
INSERT INTO plch_emp
VALUES (7499
, 'ALLEN'
, 'SALESMAN'
, 7698
, TO_DATE ('20-FEB-81', 'DD-MON-RR')
, 1600
, 300
, 30);
INSERT INTO plch_emp
VALUES (7521
, 'WARD'
, 'SALESMAN'
, 7698
, TO_DATE ('22-FEB-81', 'DD-MON-RR')
, 1250
, 500
, 30);
INSERT INTO plch_emp
VALUES (7566
, 'JONES'
, 'MANAGER'
, 7839
, TO_DATE ('02-APR-81', 'DD-MON-RR')
, 2975
, NULL
, 20);
INSERT INTO plch_emp
VALUES (7654
, 'MARTIN'
, 'SALESMAN'
, 7698
, TO_DATE ('28-SEP-81', 'DD-MON-RR')
, 1250
, 1400
, 30);
INSERT INTO plch_emp
VALUES (7698
, 'BLAKE'
, 'MANAGER'
, 7839
, TO_DATE ('01-MAY-81', 'DD-MON-RR')
, 2850
, NULL
, 30);
INSERT INTO plch_emp
VALUES (7782
, 'CLARK'
, 'MANAGER'
, 7839
, TO_DATE ('09-JUN-81', 'DD-MON-RR')
, 2450
, NULL
, 10);
INSERT INTO plch_emp
VALUES (7788
, 'SCOTT'
, 'ANALYST'
, 7566
, TO_DATE ('19-APR-87', 'DD-MON-RR')
, 3000
, NULL
, 20);
INSERT INTO plch_emp
VALUES (7839
, 'KING'
, 'PRESIDENT'
, NULL
, TO_DATE ('17-NOV-81', 'DD-MON-RR')
, 5000
, NULL
, 10);
INSERT INTO plch_emp
VALUES (7844
, 'TURNER'
, 'SALESMAN'
, 7698
, TO_DATE ('08-SEP-81', 'DD-MON-RR')
, 1500
, 0
, 30);
INSERT INTO plch_emp
VALUES (7876
, 'ADAMS'
, 'CLERK'
, 7788
, TO_DATE ('23-MAY-87', 'DD-MON-RR')
, 1100
, NULL
, 20);
INSERT INTO plch_emp
VALUES (7900
, 'JAMES'
, 'CLERK'
, 7698
, TO_DATE ('03-DEC-81', 'DD-MON-RR')
, 950
, NULL
, 30);
INSERT INTO plch_emp
VALUES (7902
, 'FORD'
, 'ANALYST'
, 7566
, TO_DATE ('03-DEC-81', 'DD-MON-RR')
, 3000
, NULL
, 20);
INSERT INTO plch_emp
VALUES (7934
, 'MILLER'
, 'CLERK'
, 7782
, TO_DATE ('23-JAN-82', 'DD-MON-RR')
, 1300
, NULL
, 10);
COMMIT;
END;
下列哪些查询会产生一个有效的XML文档,包含employee表的数据?
注意,如果你不知道一个XML文档的格式是否正确,可以输出到一个文件并用浏览器打开它。如果格式不对你将会看到错误信息。请记住,你的客户工具(SQL*Plus, SQL*Developer, TOAD)可能会将一行断成多行。你要检查它是否在一个标记的中间被断开了。
(A)
SET PAGESIZE 0
SELECT xml
FROM
(
SELECT 1 nr, '<?xml version="1.0" encoding="UTF-8"?><employees>' xml
FROM dual
UNION ALL
SELECT 2 nr, '<employee>' ||
'<id>' || e.empno || '</id>' ||
'<name>' || DBMS_XMLGEN.convert(e.ename) || '</name>' ||
'<job>' || DBMS_XMLGEN.convert(e.job) || '</job>' ||
'</employee>'
FROM plch_emp e
WHERE e.deptno = 10
UNION ALL
SELECT 3 nr, '</employees>'
FROM dual
)
ORDER BY nr;
(B)
SET PAGESIZE 0
SET LONG 100000
SET LONGCHUNKSIZE 100000
SELECT XMLROOT(
XMLELEMENT(
"employees",
XMLAGG(
XMLELEMENT(
"employee",
XMLELEMENT("id", e.empno),
XMLELEMENT("name", e.ename),
XMLELEMENT("job", e.job)
)
)
)
,VERSION NO VALUE)
FROM plch_emp e
WHERE e.deptno = 10;
(C)
SET PAGESIZE 0
SET LONG 100000
SET LONGCHUNKSIZE 100000
SELECT XMLROOT(
XMLELEMENT("employees",
XMLAGG(
XMLELEMENT(
"employee",
XMLFOREST(
e.empno AS "id",
e.ename AS "name",
e.job AS "job"
)
)
)
)
,VERSION NO VALUE)
FROM plch_emp e
WHERE e.deptno = 10;
(D)
SET PAGESIZE 0
SET LONG 100000
SET LONGCHUNKSIZE 100000
SELECT XMLELEMENT(
"employee",
XMLFOREST(
e.empno AS "id",
e.ename AS "name",
e.job AS "job"
)
)
FROM plch_emp e
WHERE e.deptno = 10;
(E)
SET PAGESIZE 0
SET LONG 100000
SET LONGCHUNKSIZE 100000
SELECT XMLROOT(
XMLELEMENT("employees",
XMLELEMENT(
"employee",
XMLATTRIBUTES(
e.empno AS "id",
e.ename AS "name",
e.job AS "job"
)
)
)
,VERSION NO VALUE)
FROM plch_emp e
WHERE e.deptno = 10; |
|