Announcement

Collapse
No announcement yet.

STRING im STRING

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

  • STRING im STRING

    Hallo allerseits,

    bin auf ein interessantes Problem gestoßen.

    Wie kann man einen String in einem String markieren? Hintergrund:

    Ich möchte eine Prozedur testen, der ich ein SQL-Statement als String übergebe, nämlich dieses:
    INSERT INTO FLOWERS (NAME , PRICE , AMOUNT) VALUES ('Tulpe' , 5 , 100)

    Wenn ich auf RUN im ORACLE SQL DEVELOPER starte, dann erscheint die Eingabeaufforderung, in der ich den Parameter stmt mit Werten füllen kann, siehe ROT. Das Problem sind die LILA Anführungszeichen. Denn RUN denkt, dass bei dem ersten LÍLA-Anführungszeichen bei "Tulpe" der String aufhört und beim zweiten wieder beginnt. Das funktioniert dann natürlich nicht. Habe schon recherchiert, dass man in diesem Fall zwei Anführungszeichen eingeben müsste, aber das funzt auch nicht. Hat jemand eine Idee?

    DECLARE
    STMT VARCHAR2(200);
    BEGIN
    STMT := 'INSERT INTO FLOWERS (NAME , PRICE , AMOUNT) VALUES ('Tulpe' , 5 , 100)';

    EXECUTE_SQL(
    STMT => STMT
    );
    END;

    Danke für Hinweise.

  • #2
    Korrrektur

    Hallo,

    das Problem scheint woanders zu liegen. Und zwar nicht bei der Übergabe der Parameter, sondern beim Execute. Hier etwas Code:

    stmt := 'INSERT INTO FLOWERS (NAME , PRICE , AMOUNT) VALUES (''Tulpe'', 5 , 100)';
    cur := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(cur, stmt, DBMS_SQL.NATIVE);

    -- create columns
    FOR i in 1..counter LOOP
    col_n(i) := NULL;
    col_v(i) := NULL;
    col_d(i) := NULL;
    END LOOP;

    -- declare column-types
    FOR i in 1..counter LOOP
    CASE desc_Tbl(i).col_type
    WHEN DBMS_TYPES.TYPECODE_VARCHAR THEN
    DBMS_SQL.DEFINE_COLUMN(cur, i, col_v(i), 2000);
    WHEN DBMS_TYPES.TYPECODE_NUMBER THEN
    DBMS_SQL.DEFINE_COLUMN(cur, i, col_n(i));
    WHEN DBMS_TYPES.TYPECODE_DATE THEN
    DBMS_SQL.DEFINE_COLUMN(cur, i, col_d(i));
    END CASE;
    END LOOP;
    i := DBMS_SQL.EXECUTE(cur);

    Nach Ausführung dieser Zeile kommt folgende Fehlermeldung!

    Fehlermeldung:
    ORA-00900: Ungültige SQL-Anweisung
    ORA-06512: in "SYS.DBMS_SYS_SQL", Zeile 1647
    ORA-06512: in "SYS.DBMS_SQL", Zeile 621
    ORA-06512: in "DWH_3.EXECUTE_SQL", Zeile 23
    ORA-06512: in Zeile 6

    Bin für jede Hilfe dankbar.

    Comment


    • #3
      Hallo,

      wenn du die Werte nicht direkt in den String schreibst, sondern als Parameter ausführst und mit BIND_VARIABLE an die Abfrage bindest, dann sparst du dir den Ärger mit doppelten oder einfachen Hochkommas.

      Außerdem verstehe ich die DEFINE_COLUMNs nicht. Ein INSERT liefert keinen Cursor, also auch keine Spalten zurück!

      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

      Working...
      X