SQl Block in execute immediate

Dany4

Benutzer
Beiträge
7
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?
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.416
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.
 

Dany4

Benutzer
Beiträge
7
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 ?
 

ukulele

Datenbank-Guru
Beiträge
4.416
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?
 
Werbung:

Dany4

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

Gruß & Danke nochmal.
 
Oben