Subject | simply CTE |
---|---|
Author | Check_Mail |
Post date | 2016-12-13T14:48:38Z |
Hello,
at the moment I get all material of a product with a recoursion, but in some
case, I get it manyfold and not grouped. (it gets all Material of the
material in each level)
How can I create a CTE (grouped)?
create or alter procedure P_GETMATERIALTEST (
TEILENR varchar(16),
ANZAHLT double precision,
I integer,
VTEILENR varchar(16),
VBSNR integer)
returns (
BSNR integer,
MATERIALNR varchar(16),
ANZAHLM double precision,
K integer,
TTEILENR varchar(16),
TBSNR integer)
AS
/**/BEGIN
materialnr = teilenr;TTEILENR=vteilenr;TBSNR = VBSNR;
anzahlm = anzahlt; k=i+1; suspend;
for select bsnr, matteilenr, anzahl from tmaterial a
left join tteile b on(a.matteilenr = b.teilenr)
where a.teilenr = :teilenr order by a.bsnr
into :bsnr, :materialnr, :anzahlm do
begin anzahlm = anzahlm * anzahlt;vteilenr = teilenr;VBSNR = BSNR;
if (k < 800) then
for select materialnr, anzahlm, k,tteilenr,tbsnr from
P_GETMATERIALTEST(:materialnr, :anzahlm, :k, :vteilenr, :vbsnr)
into :materialnr, :anzahlm, :k,:TTEILENR,:TBSNR do suspend;
else
insert into terrorlog(tabelleproz, zeitstempel, wert, fehler) values
('P_GETMATERIAL3', 'now', :k, :teilenr || ' Wert Zhlervariable zu hoch!');
end
END
at the moment I get all material of a product with a recoursion, but in some
case, I get it manyfold and not grouped. (it gets all Material of the
material in each level)
How can I create a CTE (grouped)?
create or alter procedure P_GETMATERIALTEST (
TEILENR varchar(16),
ANZAHLT double precision,
I integer,
VTEILENR varchar(16),
VBSNR integer)
returns (
BSNR integer,
MATERIALNR varchar(16),
ANZAHLM double precision,
K integer,
TTEILENR varchar(16),
TBSNR integer)
AS
/**/BEGIN
materialnr = teilenr;TTEILENR=vteilenr;TBSNR = VBSNR;
anzahlm = anzahlt; k=i+1; suspend;
for select bsnr, matteilenr, anzahl from tmaterial a
left join tteile b on(a.matteilenr = b.teilenr)
where a.teilenr = :teilenr order by a.bsnr
into :bsnr, :materialnr, :anzahlm do
begin anzahlm = anzahlm * anzahlt;vteilenr = teilenr;VBSNR = BSNR;
if (k < 800) then
for select materialnr, anzahlm, k,tteilenr,tbsnr from
P_GETMATERIALTEST(:materialnr, :anzahlm, :k, :vteilenr, :vbsnr)
into :materialnr, :anzahlm, :k,:TTEILENR,:TBSNR do suspend;
else
insert into terrorlog(tabelleproz, zeitstempel, wert, fehler) values
('P_GETMATERIAL3', 'now', :k, :teilenr || ' Wert Zhlervariable zu hoch!');
end
END