Autor Beitrag
erfahrener Neuling
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 233
Erhaltene Danke: 19

Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
BeitragVerfasst: Di 14.06.16 14:41 
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

ausblenden 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):
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 233
Erhaltene Danke: 19

Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
BeitragVerfasst: Mi 15.06.16 08:49 
Also vom Prinzip her hab ich's gelöst:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: erfahrener Neuling
erfahrener Neuling Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 233
Erhaltene Danke: 19

Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
BeitragVerfasst: 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:
ausblenden SQL-Anweisung
1:
for select distinct Preisliste from ArtikelImport where ArtikelNummer=:cArtikelNr into :cPreisliste