1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

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

Dieses Thema im Forum "Oracle" wurde erstellt von mindhunter, 5 Februar 2019.

  1. mindhunter

    mindhunter Benutzer

    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;
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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=*#
    
     
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