Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Selbst definierten Type abfragen

Dieses Thema im Forum "Oracle" wurde erstellt von jstei001, 10 Juli 2012.

  1. jstei001

    jstei001 Neuer Benutzer

    Hallo,

    ich habe folgendes Problem:
    Ich schreibe ein Testtool was ein Mapping verfahren zwischen XML und Datenbanktypen testet.
    Der Haupteil ist in Java programmiert das funktioniert auch, in der Datenbank habe ich nun eine Tabelle mit 5 Spalten. Die ersten drei werden von Java aus gefüllt mit XML_Element_Name und Value und einer Table_ID (die ist aber erstmal unwichtig), der value dient sozusagen als eindeutige id für ein Element, wir wollen testen wo dieser Wert in der Datenbank gelandet ist.

    Jetzt kommt über einen Webservice passend zu den XML-Elementen, Datenbanktypen an. Es gibt 11 verschiedene und jeder hat seine eigene Funktion in der er als Parameter übergeben wird.

    Meine Aufgabe: Ich muss diese Funktionen implementieren, und zwar muss ich den Type auslesen und den Namen der Elemente an die Stelle schreiben wo ihr wert in der Tabelle steht. Wo ich nicht weiter komm ist, wie kann ich den Type am besten zerlegen. In Java wäre es ja einfach mit ner Schleife durchgehen und alle Elemente auslesen und deren Wert bestimmen. Aber in PL/SQL ist das ziemlich schwer jedenfalls für mich.

    Die Tabelle sieht so aus:
    ID | XML_Element_Name | Value | PL/SQL_Type_Name

    Die Typen haben leider auch wieder Typen als Elemente also müsste ich da wie bei einem Baum durchsteigen oder so.

    Ich nutze den PL/SQL Developer mit einer 11g Oracle Datenbank.

    Vielen Dank für eure Hilfe.
     
  2. ukulele

    ukulele Datenbank-Guru

    Also wenn ich dich richtig verstehe ist PL/SQL_Type_Name eine Spalte mit den Inforamtionen für Typ und Spaltenname, die du wiederum in deine Abfrage einbauen möchtest.

    Gibt es ein Trennzeichen (Leerschritt)? Kann dieses Ziechen auch im Spaltennamen vorkommen?
     
  3. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Hy,

    natürlich kannst du in PLSQL auch durch loopen. Aber was du benötigst sind hier hierachische Abfragen.

    Hier ein kleines Beispielscript:

    Code:
    select level ,pnr, LPAD(' ',2*(LEVEL-1)) || name name, chef_pnr
    from mitarbeiter
    start with pnr=1
    connect by prior pnr = chef_pnr;
    Lg
     
  4. jstei001

    jstei001 Neuer Benutzer

    Hi,

    vielen Dank für die Antworten, also PL/SQL_TYPE_NAME ist wirklich nur der Name des Feldes. Zum Beispiel gibt es einen Typ Gruppe in der DB der hat ein Feld namesn ID. Dann gibt es z.B. ein XML mit einem Element GRP und das hat ein Attribut ID. Jetzt wird diese ID mit einer Zufallszahl belegt die eindeutig ist. Anschließend wird durch ein Mapping verfahren dieses GRP(XML) Element auf die Datenbank abgebildet, in Form eines Types, dieser Typ hat auch ein Feld namens ID und in diesem steht nun der eindeutige Wert. Anhand dieses Wertes ermittele ich den Type und will den namen ausgeben.

    Damit man am Ende sowas prüfen kann GRP.ID wurde in der Datenbank zu Gruppe.ID richtig oder falsch? Das Mapping Verfahren wird extern durchgeführt es gibt vorgegebene XML-Dokumente und (mehr oder weniger) passende DB-Typen dazu, ich soll einfach nur Testen ob etwas falsch gemappt wurde.
     
  5. ukulele

    ukulele Datenbank-Guru

    Also ich verstehe das so: Es wird aus einem XML Element das Atribut ID in eine Datenbankzeile geschrieben. Anhand dieses Eintrages (der nur den Wert umfasst) möchtest du jetzt den Typ bestimmen (INT, VARCHAR, DATE etc.)? Wie willst du ihn prüfen wenn du selbst nicht auf das XML Element zugreifen kannst?
     
  6. jstei001

    jstei001 Neuer Benutzer

    Sry habs bissl doof formuliert mit DB_typ meinte ich den selbst definierten Typ in der Datenbank. Als Beispiel:

    Ich habe ein XML:
    <a>
    <b>
    </a>

    und einen Selbst definierten DB-Type create Type a AS Object.....b=varchar2...... Dann kann ich ja in der Datenbank folgendes machen a.b="Text". So jetzt läuft das Mapping verfahren so ab mit JAXB wird aus dem XML eine Java Klasse gemacht. Class a z.B. mit der Methode setB(String value). Auf der anderen Seite wird mit dem JPublisher aus dem DB-Type auch Java Klassen erzeugt Class db_a z.B.. Dann werden diese Klassen auf einander abgebildet. Das heißt es wird unmarshal auf ein XML angewand und dann entsteht ein Object von der Klasse a wo das feld b den wert "abc" hat. Dann wird gemappt und es entsteht ein Object der Klasse db_a wo das Feld b="abc" hat, dieser DB_Typ wird jetzt in die Datenbank geschrieben. Mein Aufgabe ist ich weiß es gibt ein XML Element a mit dem Feld b und ich muss herausfinden auf welchen DB_Typ das abgebildet wurde, ich will dann in der Datenbank alle Typen durchsuchen (sind ca. 11 Stück) welcher ein Feld mit dem Wert "abc"(dieser Wert ist eindeutig) hat. Und dann will ich wissen welcher typ das ist und ob dieser typ noch einen Obertyp hat.
    Damit dann die Tabelle am ende so aussieht

    ID|XML_Path | XML_Element_Name | Value | PL/SQL_Type_Name | plsql_type_path

    2 | a/b | b | "abc"| b |db_a/b

    Ist schwer das richtig zu formatieren....
     
  7. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Wird das ganze in eine Tabelle geschrieben?
    Mir ist noch unklar wohin deine ganzen Informationen geschrieben werden und in welcher Form?

    z.B.: in eine Tabelle in eine Spalte mit dem Datentyp CLOB
    Und in dieser stehen deine empfangenen XML-Daten?

    Kannst du bitte nochmals ein Beispiel liefern, wie so etwas aussieht wenn du es bekommst und welchen Wert du nun ermitteln musst?

    Danke und Lg
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden