CREATE OR REPLACE PROCEDURE NewRegICAPriceRoland(inbruker IN ANVANDARE.ANVANDARID%TYPE, inUnderlagid IN PBK.PRISREGISTER.UNDERLAGID%TYPE, inDatum IN VARCHAR2) IS -- This procedure registers prices in table PRISREGISTER -- The prices registered are selected from shops -- gods (article) databases. -- Note ONLY PRICES FOR SHOPS IN DWH are registered by this -- routine. Other prices are registered by routine RegImportprice -- Author : Mikael Sjöblom 2000-10-17 -- Modified by Mikael Sjöblom and Roland Sköldblom 2001-10-16 -- Added code for data on different computers -- Added code to select price for PLU- articles from imported data. TYPE t_ref_cur IS REF CURSOR; lvSQL VARCHAR2(2800); ButikExist VARCHAR2(50); AvdNr RIK2.AVD.AVDNR%TYPE; ButikId PBK.BUTIKKORGBUTIKREL.BUTIKID%TYPE; varenr PBK.VARUKORGEANREL.VARENR%TYPE; levnr PBK.VARUKORGEANREL.LEVNR%TYPE; vare_snr PBK.VARUKORGEANREL.VARE_SNR%TYPE; lagstapris PBK.VARUKORGEANREL.LAGSTAPRIS%TYPE; Ean PBK.VARUKORGEANREL.EAN%TYPE; EanLPVara PBK.VARUKORGEANREL.EAN%TYPE; substitutean PBK.LPKORGEANREL.EANREL%TYPE; tmpsubstitutean PBK.LPKORGEANREL.EANREL%TYPE; strsubstitutean VARCHAR2(100); ButikPris PBK.PRISREGISTER.Pris%TYPE; ButikFSGPris PBK.PRISREGISTER.Pris%TYPE; ButikPantBelopp PBK.PRISREGISTER.Pris%TYPE; strButikPris VARCHAR2(10); SubstitutPris PBK.PRISREGISTER.Pris%TYPE; tmpSubstitutPris PBK.PRISREGISTER.Pris%TYPE; IcaStatus PBK.PRISREGISTER.REGICASTATUS%TYPE; Period PBK.PRISREGISTER.PERIOD%TYPE; ButikKorgId BUTIKKORG.BUTIKKORGID%TYPE; VaruKorgId VARUKORG.VARUKORGID%TYPE; varutyp PBK.PRISREGISTER.VARUTYP%TYPE; SubstitutVarutyp PBK.LPKORGEANREL.VARUTYP%TYPE; tmpSubstitutVarutyp PBK.LPKORGEANREL.VARUTYP%TYPE; lastAvdnr Varchar2(1); lookUpServerName PBK.SERVER_NAME.SERVER_NAME%TYPE; borttags_flagg number; v_ErrorCode number; v_ErrorText VarChar2(500); eanost boolean; c_t_Butik t_ref_cur; -- all shops c_t_Varu t_ref_cur; -- all articles c_t_Pris t_ref_cur; -- Used to fetch prices for a shop c_t_PrisSubstitut t_ref_cur; -- Used to fetch substitute prices for a shop c_t_ButikExist t_ref_cur; -- Used to check if shop data exists c_t_LPKORG t_ref_cur; -- Used to Find LP c_t_flagga t_ref_cur; BEGIN SELECT BUTIKKORGID,VARUKORGID,PERIOD into ButikKorgId, VaruKorgId, Period FROM PBK.UNDERLAG WHERE PBK.UNDERLAG.UNDERLAGID = inUnderlagid; --DBMS_OUTPUT.PUT_LINE('ButikKorgId= '||ButikKorgId); -- DBMS_OUTPUT.PUT_LINE('VaruKorgId= '||VaruKorgId); -- DBMS_OUTPUT.PUT_LINE('Period= '||Period); lvSQL := 'SELECT AVDNR,BUTIKS_NR,SUBSTR(avdnr,LENGTH(AVDNR),1) ' || 'FROM RIK2.AVD,PBK.BUTIKKORGBUTIKREL ' || 'WHERE PBK.BUTIKKORGBUTIKREL.BUTIKKORGID=' ||ButikKorgId|| ' ' || 'AND PBK.BUTIKKORGBUTIKREL.BUTIKTYP=0 ' || 'AND RIK2.AVD.BUTIKS_NR=PBK.BUTIKKORGBUTIKREL.BUTIKID ' || 'AND RIK2.AVD.SELSKAP=''11'' ' || 'AND RIK2.AVD.DT_SLUTT is null'; OPEN c_t_Butik FOR lvSQL; LOOP FETCH c_t_Butik INTO Avdnr,ButikId,lastAvdnr; EXIT WHEN c_t_Butik%NOTFOUND; -- Code to find computer thar stores information Select Server_Name Into LookUpServerName From PBK.SERVER_NAME Where Server_ID=lastAvdnr; lvSQL := 'SELECT TABLE_NAME FROM ALL_TABLES@'||LookUpServerName|| ' '|| 'WHERE TABLE_NAME=''ICA_ARTIKEL'' ' || 'AND OWNER=''A'||Avdnr||''''; -- DBMS_OUTPUT.PUT_LINE(lvSQL); OPEN c_t_ButikExist FOR lvSQL; FETCH c_t_ButikExist INTO ButikExist; IF c_t_ButikExist%FOUND THEN -- Fetch all articles in Varukorg lvSQL := 'SELECT EAN,VARENR,LEVNR,VARE_SNR,LAGSTAPRIS,VARUTYP ' || 'FROM PBK.VARUKORGEANREL ' || 'WHERE PBK.VARUKORGEANREL.VARUKORGID=' ||VaruKorgId; -- DBMS_OUTPUT.PUT_LINE(lvSQL); OPEN c_t_Varu FOR lvSQL; LOOP /* Kommentar för att hantera ostar tab ort kommentar när klart FETCH c_t_Varu INTO Ean,varenr,levnr,vare_snr,lagstapris,varutyp; EXIT WHEN c_t_Varu%NOTFOUND; */ /*Ta bort all kod inom loopen när ostar ar klara */ Loop FETCH c_t_Varu INTO Ean,varenr,levnr,vare_snr,lagstapris,varutyp; EXIT WHEN c_t_Varu%NOTFOUND; if ean >599 and ean <699 then eanost := false; --'ndrat denna rad till false else eanost := false; end if; EXIT WHEN eanost = false; end loop; EXIT WHEN c_t_Varu%NOTFOUND; SubstitutPris := null; substitutean := null; ButikPris := null; ButikPantBelopp := null; SubstitutVarutyp := null; if lagstapris = 1 then -- Is this article marked for "Lägsta pris" -- If Plu article.Try to look up price in imported data from shop if varutyp = 4 then lvSQL := 'SELECT PRIS ' || 'FROM PBK.PLUBUTIKPRISREL '|| 'WHERE PERIOD='''||Period|| ''' ' || 'AND BUTIKS_NR='||butikId||' ' || 'AND PBKPLU='|| ean; -- DBMS_OUTPUT.PUT_LINE(lvSQL); OPEN c_t_Pris FOR lvSQL; FETCH c_t_Pris into ButikPris; CLOSE c_t_Pris; end if; --insert into pbk.Error (Err_Code,Err_Text,SQL_TEXT) Values --(1,'PLU LP',lvSQL); --commit; -- If PLU price NOT found in imported data from shop -- Or if this is not a PLU then -- Retreive prices for articles according to the LP-relational table. if ButikPris is null then lvSQL := 'SELECT EANREL ' || 'FROM PBK.LPKORGEANREL ' || 'WHERE EANLP='||Ean|| ' ' || 'AND VARENRLP='||varenr|| ' ' || 'AND VARE_SNRLP='||vare_snr; OPEN c_t_LPKorg FOR lvSQL; Loop FETCH c_t_LPKorg into EanLPVara; EXIT WHEN c_t_LPKorg%NOTFOUND; tmpSubstitutPris := null; ButikPantBelopp := null; tmpsubstitutean := null; tmpSubstitutVarutyp := null; tmpSubstitutEan:=EanLPVara; /* /Nytt från Mikael Enligt mig är det endast här du ska skriva om. Dvs ingenting ovanför denna rad. Vad som sak göras är att loopa igenom alla ean som finns i tabellen pbk.lpkorgeanrel och plocka upp det priset som är det lägsta. Felet som jag ser är att det inte finns något vilkor på pbk.lpkorgeanrel. Detta får du lösa som du vill. Jag tror att denna kod blir rätt om du tar bort alla länkar till pbk.lpkorgeanrel */ lvSQL := 'SELECT ICA_ARTIKEL.FSGPRIS,ICA_ARTIKEL.BORTTAGS_FLAGG,ICA_ARTIKEL.PANTBELOPP ' || --PBK.LPKORGEANREL.EANREL,PBK.LPKORGEANREL.VARUTYP ' || 'FROM A'||AvdNr||'.ICA_ARTIKEL@'||LookUpServerName|| ' ' || --PBK.LPKORGEANREL ' || 'WHERE ICA_ARTIKEL.EAN=' || EanLPVara || ' ' || 'AND ICA_ARTIKEL.DATUM 4 then lvSQL := 'SELECT ICA_ARTIKEL.FSGPRIS,ICA_ARTIKEL.PANTBELOPP ' || 'FROM A'||Avdnr||'.ICA_ARTIKEL@'||LookUpServerName|| ' ' || 'WHERE ICA_ARTIKEL.EAN='||Ean|| ' ' || 'AND ICA_ARTIKEL.DATUM