Está en la página 1de 4

XMLdesdeSQLyPL/SQL

IDENTIFICACIN
Proyecto

DBconnector XML desde SQL y PL/SQL

Nombre del Documento

DOCxmlDesdePLSQL.odt

Autor

Juan Luis Serradilla Amarilla

Versin Actual

1.0

Fecha de la Versin

7 de mayo de 2008

RESUMEN
Estoesun"howto"decmotrabajarconXMLdesdeSQLoPL/SQL(losejemplosestnprobados
ennuestraBDdedesarrollo,quees9i).

VERSIONES
Versin

Fecha

Autor

Descripcin

1.0

07/05/2008

Juan Luis Serradilla Amarilla

Versin inicial

Metodologa,NormalizacinyCalidaddelSoftwareATICA

XMLdesdeSQLyPL/SQL

Pgina1de4

ndicedecontenido
1.Introduccin.......................................................................................................................................3
2.ObtenerlosdatosdeunatablaenformatoXML...............................................................................3
2.1.DesdePL/SQLconDBMS_XMLGEN....................................................................................3
2.2.DesdeSQLusandofuncionesdeSQLX...................................................................................3
3.AlmacenardatosXMLenunatablayleerlos...................................................................................4
4.CrearunndicesobredatosXML......................................................................................................4
5.Referencias.........................................................................................................................................4

Metodologa,NormalizacinyCalidaddelSoftware

ATICA

Pgina3de4

XMLdesdeSQLyPL/SQL

1. Introduccin.
Oracle,yaensuversin8i,empezaintroducircapacidadesdeprocesamientoXMLensumotorde
basededatos.
EstoesunaNotaTcnica,msbienun"howto",decmotrabajarconXMLdesdeSQLoPL/SQL
(losejemplosestnprobadosennuestraBDdedesarrollo,quees9i).

2. ObtenerlosdatosdeunatablaenformatoXML.
2.1. DesdePL/SQLconDBMS_XMLGEN.
SQL>
DECLARE
CtxDBMS_XMLGEN.ctxHandle;Var'stoconvertSQLoutputtoXML
xmlclob;
emp_noNUMBER:=7369;
xmlcvarchar2(4000);Var'srequiredtoconvertlobtovarchar
offinteger:=1;
leninteger:=4000;
BEGIN
Ctx:=DBMS_XMLGEN.newContext('SELECT*FROMempWHEREempno='||emp_no);
DBMS_XMLGen.setRowsetTag(Ctx,'EMP_TABLE');
DBMS_XMLGen.setRowTag(Ctx,'EMP_ROW');
xml:=DBMS_XMLGEN.getXML(Ctx);
DBMS_XMLGEN.closeContext(Ctx);
DBMS_LOB.READ(xml,len,off,xmlc);Displayfirstpartonscreen
DBMS_OUTPUT.PUT_LINE(xmlc);
END;
SQL>/
<?xmlversion="1.0"?>
<EMP_TABLE>
<EMP_ROW>
<EMPNO>7369</EMPNO>
<ENAME>SMITH</ENAME>
<JOB>CLERK</JOB>
<MGR>7902</MGR>
<HIREDATE>17DEC80</HIREDATE>
<SAL>800</SAL>
<DEPTNO>20</DEPTNO>
</EMP_ROW>
</EMP_TABLE>
PL/SQLproceduresuccessfullycompleted.

2.2. DesdeSQLusandofuncionesdeSQLX.
ComoXMLelement(),XMLForest(),XMLSequence(),etc.
Metodologa,NormalizacinyCalidaddelSoftware

ATICA

XMLdesdeSQLyPL/SQL

Pgina3de4

SQL>setlong32000
SQL>SELECTXMLELEMENT("EMP_TABLE",
(selectXMLELEMENT("EMP_ROW",
XMLFOREST(empno,ename,job,mgr,hiredate,sal,deptno)
)
fromemp
whereempno=7369))
fromdual;
XMLELEMENT("EMP_TABLE",(SELECTXMLELEMENT("EMP_ROW",XMLFOREST(EMPNO,ENAME,JOB,MGR

<EMP_TABLE><EMP_ROW><EMPNO>7369</EMPNO><ENAME>SMITH</ENAME><JOB>CLERK</JOB><MGR>
7902</MGR><HIREDATE>17DEC80</HIREDATE><SAL>800</SAL><DEPTNO>20</DEPTNO></EMP_R
OW></EMP_TABLE>

3. AlmacenardatosXMLenunatablayleerlos.
SQL>createtableXMLTable(doc_idnumber,xml_dataXMLType);
Tablecreated.
SQL>insertintoXMLTablevalues(1,
XMLType('<FAQLIST>
<QUESTION>
<QUERY>Question1</QUERY>
<RESPONSE>Answergoeshere.</RESPONSE>
</QUESTION>
</FAQLIST>'));
1rowcreated.
SQL>
selectextractValue(xml_data,'/FAQLIST/QUESTION/RESPONSE')XPathexpression
fromXMLTable
whereexistsNode(xml_data,'/FAQLIST/QUESTION[QUERY="Question1"]')=1;
EXTRACTVALUE(XML_DATA,'/FAQLIST/QUESTION/RESPONSE')XPATHEXPRESSION

Answergoeshere.

4. CrearunndicesobredatosXML.
SQL>createindexXMLTable_indonXMLTable
(extractValue(xml_data,'/FAQLIST/QUESTION/QUERY'));
Indexcreated.

5. Referencias

http://www.orafaq.com/faqxml.htm

http://www.oracle.com/technology/tech/xml/index.html

http://www.oracle.com/technology/pub/articles/quinlanxml.html

Metodologa,NormalizacinyCalidaddelSoftware

ATICA

También podría gustarte