Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DOCxml Desde PLSQL
DOCxml Desde PLSQL
IDENTIFICACIN
Proyecto
DOCxmlDesdePLSQL.odt
Autor
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
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