Announcement

Collapse
No announcement yet.

Dbms_sql.parse + Dbms_sql.bind

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dbms_sql.parse + Dbms_sql.bind

    Hi!

    Ich würde mir gern durch die DBMS_SQL.PARSE Funktion ein Statement zur Generierung von XML zusammensetzen lassen.
    Mit DBMS_SQL.BIND kann ich ja Variablen im Parse-Statement setzen..(soweit ich verstanden hab einfach mit einem vorangestellten Doppelpunkt)
    Nur wie verhalte ich mich bei Hochkommas/Anführungsstrichen/Punkten ?
    Als Beispiel:
    Code:
    cur := dbms_sql.open_cursor;
    dbms_sql.PARSE
    (cur,'select XMLElement("root",XMLElement(":tbl_name", XMLForest(:tbl_spalten))) from db.:tbl_name where id=:curid',dbms_sql.native);
    dbms_sql.BIND_VARIABLE(cur,'tbl_name',tab_name1);
    dbms_sql.BIND_VARIABLE(cur,'tbl_spalten',tab_spalten);
    dbms_sql.BIND_VARIABLE(cur,'curid',currentid);
    Er bschwert sich wegen eines ungültigen Tabellen Namens....

    Wie kann ich meine Variablen richtig ansprechen?
    Danke schonmal..

  • #2
    Hallo bang,

    Originally posted by bang View Post
    ...Er bschwert sich wegen eines ungültigen Tabellen Namens....

    Wie kann ich meine Variablen richtig ansprechen?...
    Der Tabellenname db.:tbl_name ist auch kein gültiger Tabellenname! Tabellennamen dürfen keine : enthalten, es sei den sie werden in doppelte Hochkommas gesetzt. Also db.":tbl_name". Damit würde er aber im Schema db nach einer Tabelle ":tbl_name" suchen, sicherlich nicht das was du wolltest.
    Langer Rede kurzer Unsinn, für Objektnamen und Schlüsselwörter kannst du keine Parameter verwenden, hier mußt du den SQL-String dynamisch zusammenbauen. ...from db.' || tab_name1 || ' where i...

    Originally posted by bang View Post
    ...Nur wie verhalte ich mich bei Hochkommas/Anführungsstrichen/Punkten ?...
    Über Hochkommas brauchst du dir keine Gedanken machen, beim Binden der Variablen achtet Oracle automatisch auf die richtigen Datentypen. Also einfach ...XMLElement(:tbl_name,...

    Dein Bsp. müßte also in etwa so aussehen:
    [highlight=sql]
    cur := dbms_sql.open_cursor;
    dbms_sql.PARSE
    (cur, 'select XMLElement(''root'', XMLElement(:tbl_name, XMLForest(:tbl_spalten))) from db.' || tab_name1 || ' where id=:curid', dbms_sql.native);
    dbms_sql.BIND_VARIABLE(cur, 'tbl_spalten', tab_spalten);
    dbms_sql.BIND_VARIABLE(cur, 'curid', currentid);
    [/highlight]

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Dankeschön für Deine Erklärung!

      Gruß
      bang

      Comment

      Working...
      X