[NEWSboard IBMi Forum]

Thema: Clear im SQL

  1. #1
    Registriert seit
    Nov 2009
    Beiträge
    208

    Clear im SQL

    Guten Tag,

    wir wollen mit einem allg. gültigen SQL Felder leer machen.

    Wir wollen dazu ein dynamisches SQL bauen, das (ungefär) so aussieht

    Update Datei set Feld = 0 where ... bzw, wenn das Feld alpa ist,
    Update Datei set Feld = ' ' where ...

    Diese Funktion muß in verschiedenen Ecken unsere SW engebunden werden.
    Dabei ist die Datei und das Feld variabel. Wir wissen also auch nicht,
    ob es nun ein alpa oder ein numerisches Feld ist.
    Gibt es etwas das dem Clear entspricht?
    Sonnst müsste ich immer ein Blank übertragen und den Fehler abfangen. Das ist nicht so schön.
    Vielen Dank
    Dietlinde Beck

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Es gibt keinen CLEAR in SQL.
    Da Du ja den Spalten-Inhalt auf einen Default-Wert setzen willst und nicht auf den NULL-Wert, musst Du wohl oder übel den Datentypen kennen oder ermitteln.

    Im übrigen gibt es ja noch andere als numerische oder alphanumerische Datentypen, z.B. DATE/TIME/TIMESTAMP

    Wenn Du die Datei und das Feld kennst und das SQL sowieso dynamisch zusammenklöppln willst, kannst Du den Datentypen aus der Catalog View SysColumns ermitteln und dann im Anschluss dein SQL-Statement entsprechend aufbereiten.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ich weiß auch nicht, wofür das gut sein soll.
    Im embedded SQL arbeitest du ja mit deinen Host-Variablen.
    Zur Laufzeit wird dann immer vor dem SQL ein "eval SQLnnnn = HostVarxxx;" eingefügt und nach dem SQL ein "eval HostVarXXX = SQLnnnn;"

    Somit brauchst du nur einen Clear auf deine Hostvariablen.
    Nimmst du eine DS, kannst du auch einen Clear auf die DS anwenden, dann werden alle Unterfelder passend auf den Defaultwert gesetzt.

    Möchtest du nur den Inhalt eines Satzes leeren, kannst du ebenso einen
    update table set row = : LeereDS
    durchführen. Das ist aber unnötig.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Nov 2009
    Beiträge
    208
    @Fuerchau
    Es geht um einzelnde Felder, die sind i.d.R. zu diesem Zeitpunkt nicht bekannt.

    @Birgitta
    Wir haben nur Alpa und Numerische Felder.
    Wir haben keine View SysColumns auf dem System, wie kann ich die bekommen, was steht da drin?
    vielen Dank
    DiBe

  5. #5
    Registriert seit
    Nov 2020
    Beiträge
    331
    Das geht eigentlich ganz einfach
    Update Tab set Spalte = default

    Das Schlüsselwort DEFAULT setzt den default Wert der Spalte mit dem jeweiligen Datentyp automatisch.
    Du brauchst dich also um nichts kümmern.

    Du kannst maximal vorher prüfen ob die Default-Werte aller Spalten von den Tabellen, so gesetzt sind wie du es gerne hättest.

    In der QSYS2.SYSCOLUMNS siehst du auch was der Default-Wert einer jeden Spalte ist.

    Also ganz simple und du brauchst nicht extra irgendwelche Datentypen prüfen oder sonstige Workarounds machen.

    lg Andreas

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Die View SysColumns steht in der Bibliothek QSYS2 und MUSS auf auf dem System sein.
    Auf diese View sollte es auch keine Zugriffsbeschränkungen geben.
    In der SYSCOLUMNS befinden sich die Infomationen über alle Felder/Spalten in allen Tabellen/Views/LF.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. clear auf Datumsfeld mit DFT in DDS
    By oulbrich in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 03-11-17, 10:47
  2. Frage zu SAVACT CLEAR(*ALL)
    By hs in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 28-01-16, 10:50
  3. Clear *all
    By malzusrex in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 11-11-14, 06:30

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •