Entwickler-Ecke

Alle Sprachen - Alle Plattformen - Frage zu SQL-Syntax


erfahrener Neuling - Di 14.06.16 14:41
Titel: Frage zu SQL-Syntax
Hallo,

ich muss im Moment eine Prozedur schreiben und komme einfach nicht auf die Lösung.

Ich möchte folgendes machen:

- es gibt in meiner Input-Tabelle mehrere Artikel mit versch. Artikelnummern
- es gibt aber pro Artikelnummer mehrere Einträge, welche unterschiedliche Preislisten enthalten


SQL-Anweisung
1:
2:
3:
4:
5:
ArtikelNr | Preisliste | Preis |
123       | 1          | 1,00  |
123       | 2          | 2,00  |
987       | 4          | 2,00  |
987       | 1          | 0,50  |


Nun soll in der Prozedur 1. für jede Artikelnummer EIN Eintrag in der Tabelle Artikel passieren und
2. für jede Preisliste EINER Artikelnummer eine weitere Prozedur mit der passenden ArtikelNr, Preisliste und Preis gefüttert werden

Momentan hänge ich an der 2. Sache, irgendwie bräuchte ich glaub ich noch eine Schleife o. ä.

So sieht's bis jetzt aus (unwichtige Dinge hab ich hier natürlich rausgenommen):

SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
begin
    for select distinct ArtikelNummer from ArtikelImport into :cArtikelNr
    do begin
        insert into Artikel(ArtikelNr)
        values(:cArtikelnr);

        -- dann kommt die Prozedur
        -- hier müsste dann die Schleife hin
        select * from PROC_SETPREIS((
            
        suspend;
    end
end


Hat jemand ne Idee?

Gruß Julian


erfahrener Neuling - Mi 15.06.16 08:49

Also vom Prinzip her hab ich's gelöst:

SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
begin
    for select distinct ArtikelNummer from ArtikelImport into :cArtikelNr
    do begin
        insert into Artikel(ArtikelNr)
        values(:cArtikelnr);

        for select distinct Preisliste from ArtikelImport into :cPreisliste
        do begin        
              select * from PROC_SETPREIS(:cArtikelNr,
                                          :cPreisliste,
                                          (select Preis from ArtikelImport where ArtikelNummer=:cArtikelNr And Preisliste=:cPreisliste)
                                          );
        suspend;
    end
end


Nur hab ich immernoch ein Problem: Unzwar kommt nach dem 1. Durchlauf der 1. Schleife (also mit anderer ArtikelNummer) immer eine Exception, dass der Wert für Preis null sein, obwohl in ArtikelImport keinerlei null-Werte in der Preis-Spalte sind.
Jemand ne Idee, woran dass jetzt wieder liegt?


Ralf Jansen - Mi 15.06.16 10:01

Das es für diesen Artikel in ArtikelImport die bestimmte Kombination aus ArtikelNummer und Preisliste nicht gibt?
Du holst dir scheinbar alle erwähnten Preislisten aus ArtikelImport und gehst im Anschluss davon aus das es für einen bestimmten Artikel auch alle Preislisten gibt.

Ich vermute mal du willst im for select distinct Preisliste from ArtikelImport into :cPreisliste auch auf die ArtikelNummer einschränken.


erfahrener Neuling - Mi 15.06.16 10:15

Oh man wie konnt ich das nur übersehen :autsch:

Natürlich wollt ich auch auf ArtikelNr einschränken. Danke für den Tipp!

Lösung:

SQL-Anweisung
1:
for select distinct Preisliste from ArtikelImport where ArtikelNummer=:cArtikelNr into :cPreisliste