Vor DB-Insert oder Update String auf 40 Zeichen kürzen

mindhunter

Benutzer
Beiträge
22
Hallo,

in einer Tabelle ist ein Datenfeld auf 40 Zeichen (VARCHAR2(40 BYTE)) begrenzt. Der String enthält Sonderzeichen und kann länger als 40 Zeichen sein. Damit der Insert erfolgt, muss der String abgeschnitten werden, egal wie lang der String ist. Bleibt ein Sonderzeichen am Ende stehen, kann der Datensatz aufgrund eines Fehlers nicht in die Tabelle eingefügt werden. In dem Beispiel bleibt zum Stringende ein ‚#‘ stehen. Diese Problem würde ich gerne mit einem Trigger lösen, der vor dem Insert den String auf 40 Zeichen kürzt und dann in das Feld schreibt.

String: BAP_DER_VS_0402_100n_+-10%_16V_123_''####''_457


create or replace
TRIGGER TTABLE.TR_TABLE_CUT_NAME
BEFORE INSERT OR UPDATE
ON TTABLE REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE


PT_NAME TTABLE.PT_NAME%type;


BEGIN


if
inserting or updating
then
:new.PT_NAME := Substr(PT_NAME,1,40)';
end if;


END TR_TABLE_CUT_PT_NAME;
 
Werbung:
Kannst Du nicht direkt beim INSERT das erledigen?

Code:
test=# select length('BAP_DER_VS_0402_100n_+-10%_16V_123_''####''_457');
 length
--------
     45
(1 row)

test=*# create table mindhunter(t varchar(40));
CREATE TABLE
test=*# insert into mindhunter select substring('BAP_DER_VS_0402_100n_+-10%_16V_123_''####''_457',1,40);
INSERT 0 1
test=*# select * from mindhunter ;
                    t                     
------------------------------------------
 BAP_DER_VS_0402_100n_+-10%_16V_123_'####
(1 row)

test=*# select t, length(t) from mindhunter ;
                    t                     | length
------------------------------------------+--------
 BAP_DER_VS_0402_100n_+-10%_16V_123_'#### |     40
(1 row)

test=*#
 
Zurück
Oben