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

SQl Block in execute immediate

Dieses Thema im Forum "Oracle" wurde erstellt von Dany4, 17 Juli 2012.

  1. Dany4

    Dany4 Benutzer

    Code:
           
    [CODE]Declare
    stmt varchar(2000)
    BEGIN
    STMT:='BEGIN
     
                FOR r  IN
     
                  (select to_number(Concat(to_char(datum , 'Y'), snum )) ,
     
                  datum,
     
                  to_date(Concat(to_char(gdatum , 'dd.mm.YYYY'), ' '||gzeit ),'dd.mm.YYYY
     
                  HH24:MI:SS')
     
                  from TABLE)
     
                    LOOP 
     
                      BEGIN   
     
                      insert into TABLE_NEW values r;               
     
          END;
     
            END LOOP;
     
    END;';
     
    execute immediate stmt;
    [/CODE]


    Funktioniert nicht:
    Wie muss ich die ' setzen damit die to_char funktionen richti sind?
     
  2. ukulele

    ukulele Datenbank-Guru

    Da gibt es mehrere Varianten. Bei MS SQL kann man mittels Escape-Sequenzen dem Server sagen das nächste Zeichen soll nicht als Code sondern als Zeichen interpretiert werden. Dazu verdoppelt man den ' einfach, also to_char(datum,''Y''). Wenn das nicht geht kann man aber auch mit CHAR() und ASCI Nummern einen String zusammen ketten.

    Wichtig ist, sollte ein String in dem Statement verarbeitet werden der auch noch ' enthalten kann (weil es sich um Text handelt), sollte man diesen vorher mit replace() bearbeiten und ' verdoppeln.
     
  3. Dany4

    Dany4 Benutzer

    Das ganze schreibe ich Oracle SQL/PLSQL.
    Mit dem doppelte ' hab ichs schon versucht kam dadurch aber leider nicht zum Erfolg.
    Wie würde den konkret mein Code richitg aussehen ?
     
  4. ukulele

    ukulele Datenbank-Guru

    Mit doppelten Strichen so:

    Code:
    Declare
    stmt varchar(2000)
    BEGIN
    STMT:='BEGIN
     
                FOR r  IN
     
                  (select to_number(Concat(to_char(datum , ''Y''), snum )) ,
     
                  datum,
     
                  to_date(Concat(to_char(gdatum , ''dd.mm.YYYY''), ' '||gzeit ),''dd.mm.YYYY
     
                  HH24:MI:SS'')
     
                  from TABLE)
     
                    LOOP
     
                      BEGIN 
     
                      insert into TABLE_NEW values r;             
     
          END;
     
            END LOOP;
     
    END;';
     
    execute immediate stmt;
    Allerdings nutze ich weder FOR noch LOOP noch to_char in MS SQL, daher kann ich jetzt nur bei den Escape-Sequenzen helfen. Geht denn das Statement als solches?
     
    PLSQL_SQL gefällt das.
  5. Dany4

    Dany4 Benutzer

    Das Statement funtkioniert so, danke.
    Ich hab es zwar so vorher auch versucht dürfte aber etwas übersehen haben....

    Gruß & Danke nochmal.
     
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