[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.114

    Mal wieder SQL

    Hallo *all,

    ich brauche mal wieder etwas Hilfe beim Thema SQL.

    Ich habe hier einen Auftragskopf und muß über die Kundennummer den Kundenstamm lesen. Ich muß bei allen Aufträge wo der Rechnungsempfänger im Kundenstamm <> der Rechnungsempfänger im Auftrag ist den Auftrag abändern.

    Um erstmal die Daten zu sehen habe ich folgendes geschrieben:

    select * from ako01pf where akanr >= 130887 and akanr <= 13099
    9 and akkto in
    (select adkto from adr01pf where adkto = akkto and akid1 <> ad
    id1)

    Akanr ist die Auftragsnummer
    Akkto ist die Kundennummer im Auftrag
    Adkto ist die Kundennummer im Kundenstamm
    AkID ist der Rechnungsempfänger

    Ich bekomme dann die Fehlermeldung:

    Anweisung bestätigen

    Eine Unterabfrage mit einer Korrelation wurde eingegeben; es
    fehlt jedoch das Qualifikationsmerkmal für:
    Feld . . . . . . . . . . . . .: AKID1

    Was ist da falsch?

    GG

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Das ist nur eine Warnung, bei nicht eindeutigen Namen gäbs eine Abbruchmeldung.

    Für Joins wäre die Syntax:

    select a.F1, a.F2, ..., b.F1, ...
    from myfile a
    join myfile2 b on a.k1= b.k1 and ...

    Es fehlt die Qualifikation, was aber bei eindeutigen Namen egal ist.
    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
    Aug 2006
    Beiträge
    2.114
    Hallo *all,

    ich habe jetzt das ganze mal als Update definiert und will aus dem Kundenstamm jetzt die Felder in den Auftragskopf schreiben. Ist das so richtig?

    update gregor/ako01pf a
    set (a.akid1, a.akid2, a.akid3, a.akid4, a.akid5) =
    (select
    b.adid1, b.adid2, b.adid3, b.adid4, b.adid5
    from
    gregor/ako01pf a
    left join
    gregor/adr01pf b on b.adkto = a.akkto
    and b.adfa = 1 and b.adsts = 0)
    where a.akanr >= 130800 and a.akanr <= 130999
    and a.akfa = 1 and a.akid1 = 16129

    Wobei ich das Gefühl habe das es nicht richtig ist, da ich den Auftragskopf ja 2x lese. Der wird ja dann nicht syncron sei oder?

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Die Syntax für den Update aus anderen Dateien sieht wie folgt aus:
    Code:
    update AuftrKopf A                                             
           set (A.Feld1, A.Feld2) = (select B.Feld1, B.Feld2      
                                       from KundenSt B            
                                       where     A.Key1 = B.Key1  
                                             and A.Key2 = B.Key2) 
           where exists (select C.Key1, C.Key2                    
                           from KundenSt C                        
                           where     A.Key1 = C.Key1              
                                 and A.Key2 = C.Key2)  
                 and ... weitere Where-Bedingungen
    Die Auftragskopf und Kundenstamm-Dateien habe ich schon mal eingesetzt.

    Birgitta
    Birgitta Hauser

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

  5. #5
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Danke Dir, leider liegt auf der Datei ein Trigger der das ganze verhindert. Ich müßte also den Trigger abklemmen und das geht nur dann wenn keiner drauf ist und ihn dann wieder anklemmen.
    Ich finde Trigger ja nicht schlecht aber in dieser Kombination ziemlich dämlich!

    GG

  6. #6
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Verhindert der Trigger das, weil er auf einen Hammer läuft oder weil er SQL update verhindert.

    Läuft er auf einen Hammer --> Warum ? Liblist ? LDA? ...

    Außerdem kannst du einen Trigger 'inaktiv' setzen, du mußt ihn nicht abnehmen. Aber auch dazu muß die Datei frei sein.

    Unsere Lösung ist 1 Trigger auf allen Dateien, der in einer Tabelle nachsieht ob er für diese Datei was tun muß(und dann den 'eigendlichen' Trigger called) .

    Das kann ich jederzeit ein/aus schalten
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  7. #7
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Hallo,
    wie setzte ich denn einen Trigger auf inaktiv?

    GG

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von KingofKning Beitrag anzeigen
    Hallo,
    wie setzte ich denn einen Trigger auf inaktiv?

    GG
    CL Command CHGPFTRG oder System i Navigator (auf Trigger positionieren, Rechtsclick und Disable)

    ... Trigger sollen Datenkonsistenz gewährleisten und verhindern, dass in den Daten herumgepfuscht wird.

    Birgitta
    Birgitta Hauser

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

  9. #9
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Hallo, in diesem konkreten Fall sind die Trigger dazu da, um ein Duplikat des Satzes zu erzeugen um später Veränderungen nachvollziehen zu können.

    Es bleibt für mich aber immer noch die Frage warum ein RPG Programm die Daten manipulieren kann und SQL darf nicht. Finde ich nicht logisch.

    GG

  10. #10
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    daher die Frage...
    Was geschied wenn der trigger drauf ist, und du den sql-update machst.
    Wie lautet die Fehlermeldung?

    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

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
  •