String mit Insert Into in zwei/drei Felder verteilen

mindhunter

Benutzer
Beiträge
22
Hallo,

in einer Datentabelle gibt es ein Bemerkungsfeld von Typ VARCHAR2(4000 bytes). Der Feld kann nur eine bestimmte Feldlänge aufnehmen. Gerne würde ich, sobald der String länger als das Datentayp ist, den String genau auf Feldlänge zerlegen und den Rest in ein zusätzliches Feld einfügen.

Wenn String < 4000 Byte dann,
INSERT INTO suppliers (bemerkung) VALUES ("String < 4000 Byte");
sonst
INSERT INTO suppliers (bemerkung, bemerkung2) VALUES ("String > 4000 Byte", "String >4000 Byte");

Wenn der String > 4000 Byte, dann String auf Bemerkung und Bemerkung1 verteilen. Mit einem Select-Befehl soll das Ganze dann wieder zusammen gesetzt warden.


Wenn String < 4000 Byte dann,
SELECT bemerkung from suppliers;

Wenn bemerkung und bemerkung2 belegt, dann
SELECT bemerkung & bemerkung2 from suppliers;


Liebe Grüße
Stefan
 
Werbung:
Woher kommt denn beim INSERT dein String, aus einer Variablen?

Insert:
Code:
INSERT INTO suppliers(bemerkung,bemerkung2)
VALUES(left("String > 4000 Byte",4000),(CASE WHEN len("String >4000 Byte")>4000 THEN right("String >4000 Byte",len("String >4000 Byte")-4000) ELSE NULL END));
Select:
Code:
SELECT bemerkung + isnull(bemerkung2,'') AS bemerkung from suppliers
 
Falls es den Datensatz bereits gibt, dann ein UPDATE anstatt der INSERT-Anweisung von oben.

Ist die Feldlänge im Feld bemerkung kleiner als 4000 Byte, dann trage den Wert in das benannte Feld ein. Ist der Wert größer 4000 Byte, dann verteile auf bemerkung und bemerkung1

UPDATE suppliers
SET bemerkung = 'String > 4000 Byte',
bemerkung1 = 'String 4000 Byte'
WHERE matnr ='blabla';
 
Werbung:
Das kannst du genauso handhaben wie beim INSERT:
Code:
UPDATE   suppliers
SET     bemerkung = left("String > 4000 Byte",4000),
     bemerkung2 = (CASE WHEN len("String >4000 Byte")>4000 THEN right("String >4000 Byte",len("String >4000 Byte")-4000) ELSE NULL END)
WHERE   ID = ...
 
Zurück
Oben