[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jul 2003
    Beiträge
    338

    Wink SQL - Datentyp

    In einem SQL-Trigger in einer WHERE-Anweisung möchte ich ein Datenfeld (numeric(6, 0)) mit den ersten 6 Stellen eines CHAR-Feldes vergleichen (dessen ersten 6 Stellen Ziffern sind).

    Die Abfrage lautet:
    .. where aiqual = int(substring(neu.ararti, 1, 6))

    oder in einem anderen Versuch
    .. where aiqual = decimal(substring(neu.arti, 1, 6), 6, 0)

    Beide Versionen funktionieren.

    Im JOBLOG wird allerdings jedesmal folgendes gesagt:
    - Auswahlfeldern anderen Attributen zugeordnet
    - Datentyp, Anzahl Stellen, Dezimalstelle oder Feldlänge
    geändert in: AIQUAL damit das Feld vrglichen werden konnte
    - Es kann kein Zugriffspfad zur Verarbeitung der Auswahl
    verwendet werden, da kein Schlüsselfeld über entspr.
    Attribute verfügt

    Ich habe nun Bedenken, dass im Echtbetrieb eine schlechte Performance entstehen kann wg. fehlendem Zugriffspfad.

    Kann die Vergleichsabfrage anders gestaltet werden ?

    mfg Ludger

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Wenn Attribute in einer Where-Bedingung geändert werden, gibt es halt diesen Warnhinweis, dass ggf. Performanceverluste auftreten.
    Allerdings dürfte obige Meldung nur im DEBUG-Modus auftreten, sonst würde im laufenden Betrieb das Joblog ziemlich schnell volllaufen.

    Wenn du einen SQL-Trigger machst, kannst du die beiden Felder doch über Hilfsvariablen vergleichen.

    Es ginge ggf. noch der Vergleich:
    ... where digits(aiqual) = substr(neu.arti, 1, 6) ...

    was allerdings die Fehlermeldung nicht unterdrückt.

    Alternativ kannst du eine View erstellen, in der "aiqual" bereits als "digits(aiqual) as aiqual)" umformatiert ist.
    Oder eine LF mit berenchneten Feldern, die nur die relevanten Felder enthält sowie das umformatierte "aiqual".
    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

  3. #3
    Registriert seit
    Jul 2003
    Beiträge
    338

    Thumbs up

    Hallo Baldur, danke für die Antwort.

    Ich habe inzwischen schon selber weitergesucht und die Variante mit den Hilfsvariablen (so wie du auch beschrieben hast) verwendet:

    declare qualitaet numeric(6, 0);
    set qualitaet = decimal(substring(neu.ararti, 1, 6), 6, 0);

    ... where aiqual = qualitaet


    Es ist richtig, dass die Fehlerhinwesie nur im DEBUG-Modus ersichtlich sind.

    mfg. Ludger

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL und OBJLCK
    By malzusrex in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 19-09-06, 11:04
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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