tplanitz
Erfahrenes Mitglied
Hallo Leute,
habe mich heute mal hingesetzt und möchte folgendes mit beitragen, hoffe das das Thema noch mehr Leute interessiert. Kann mir jemand genau erklären was die Funktion: DBMS_XMLGEN.setMaxRows(queryContext, 4); genau macht, das habe ich nur intuitiv geschrieben und es funktioniert aber ist mir nicht wirklich klar.
Problemstellung
============
Loesung
======
So hier die Quellen wer es probiert sollte nur SQL Plus verwenden, leider hab ich es nicht hinbekommen mit SQLTools die Darstellung zu erreichen. Evtl. habt Ihr noch Verbesserungen oder Anregungen.
================================================================
habe mich heute mal hingesetzt und möchte folgendes mit beitragen, hoffe das das Thema noch mehr Leute interessiert. Kann mir jemand genau erklären was die Funktion: DBMS_XMLGEN.setMaxRows(queryContext, 4); genau macht, das habe ich nur intuitiv geschrieben und es funktioniert aber ist mir nicht wirklich klar.
Problemstellung
============
- Frage: kann Oracle 9i Ergebnisse aus Select Abfragen direkt in XML 1.0 umwandeln
- Antwort: ja
Loesung
======
- In dem unten angehangenen Sourcen wird eine Tabelle "Auto" kreiert, Datensätze eingetragen und eine 'dummy' Tabelle zur aufnahme der Objecte gebaut.
- Als nächstes folgt die Prozedur die dann die Transformation vornimmt.
- Kann mir jemand genau erklären was die Funktion: DBMS_XMLGEN.setMaxRows(queryContext, 4); genau macht, das habe ich nur intuitiv geschrieben und es funktioniert aber ist mir nicht wirklich klar.
So hier die Quellen wer es probiert sollte nur SQL Plus verwenden, leider hab ich es nicht hinbekommen mit SQLTools die Darstellung zu erreichen. Evtl. habt Ihr noch Verbesserungen oder Anregungen.
================================================================
Code:
--------------------------------------------------------------------------------
-- Script zum Abfragen von Oracle DB 9.2 i und umwandlung der Ausgaben in
-- das XML 1.0 Format
-- Getestet mit dem Kommandozeilenprogramm SQLPLUSvon Oracle
--------------------------------------------------------------------------------
-- Schritt 1) Tabelle erstellen
-------------------------------
CREATE TABLE AUTO
(
AUTO_ID NUMBER NOT NULL ,
AUTO_NAME VARCHAR2(200) NOT NULL
)
COMMIT;
---------------------------------
-- Schritt 2) Eingaben von tupels
---------------------------------
insert INTO AUTO (AUTO_ID, AUTO_NAME) VALUES (1, 'VW');
insert INTO AUTO (AUTO_ID, AUTO_NAME) VALUES (2, 'Ford');
insert INTO AUTO (AUTO_ID, AUTO_NAME) VALUES (3, 'OPEL');
insert INTO AUTO (AUTO_ID, AUTO_NAME) VALUES (4, 'Mercedes Benz');
COMMIT;
-----------------------------------
-- Schritt 3) Erstellen der temp
-- tabelle die das object aufnimmt
----------------------------------
CREATE TABLE temp_clob (
erg CLOB NULL,
zahl NUMBER NULL
)
COMMIT;
---------------------------------
SELECT * FROM auto;
--------------------------------
CREATE OR REPLACE PROCEDURE xml_to_clob_final
IS
--declare
queryContext DBMS_XMLGEN.ctxHandle;
--xmlResult XMLType;
xmlResult CLOB ;
zaehler number := 1;
begin
-- Context mit Select-Abfrage initialisieren
queryContext := DBMS_XMLGEN.newContext
(
'select auto_id, auto_name from auto'
);
-- Anzahl der Zeilen pro Zugriff setzen
DBMS_XMLGEN.setMaxRows(queryContext, 4);
-- Tagnamen setzen
DBMS_XMLGEN.setRowTag(queryContext,'Auto');
DBMS_XMLGEN.setRowSetTag(queryContext, 'Autoliste');
-- Schleife für die Zugriffe (2 Zeilen pro Schleifendurchlauf)
loop xmlResult := DBMS_XMLGEN.getXML(queryContext);
-- Schleifenende, wenn alle Zeilen der Select-Abfrage bearbeitet wurden
exit when DBMS_XMLGEN.getNumRowsProcessed(queryContext) = 0;
-- Ergebnis verarbeiten
insert into temp_clob values (xmlResult, zaehler);
zaehler := zaehler + 1;
end loop;
-- Context schließen
DBMS_XMLGEN.closeContext(queryContext);
end;
/
--------------------------------------------------------------------------------
-- Aufruf der Procedur im SQLPLUS mit execute xml_to_clob_final;
--------------------------------------------------------------------------------