procedury%20po%20korektach.txt

(23 KB) Pobierz

ALTER procedure [dbo].[OPTYMALNA_REGULA](@wierzcholek varchar(10))
as begin


create table Miara_optymalnosci (podzial int, pl float, pp float, Miara_optymalnosci float)
declare @Tl float
declare @Tp float
declare @Pl float
declare @Pp float
declare @PjtL1 float
declare @PjtP1 float
declare @PjtL2 float
declare @PjtP2 float
declare @podzial integer
declare @poziom nvarchar(50)
declare @uczacy integer
declare @liczba_rekordow integer
declare @wynik float
declare @operator char(50)
declare @rodzaj char(50)
set @uczacy= (select count(*) from Ryzyko_klient where Nazwa_w=@wierzcholek)
if @uczacy<>0
begin

begin tran
	set @podzial=1
	while @podzial<= 9
	begin
		if (SELECT OPERATOR FROM DANE_PODZIAL WHERE Nr_podzialu=@podzial)='IN'
		begin
			set @rodzaj= (select kategoria from DANE_PODZIAL where Nr_podzialu=@podzial)
			set @poziom= (select lewa_kategoria from DANE_PODZIAL where Nr_podzialu=@podzial)
			set @Tl=(select COUNT(*) from DANE_KLIENT as DK inner join 
					RYZYKO_KLIENT as RK on RK.NR=DK.NR and DK.POZIOM=@poziom and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek)
			set @Tp=@uczacy-@Tl
			set @Pl=@Tl/@uczacy
			set @Pp=@Tp/@uczacy
			if @Tl<>0
			begin
				set @PjtL1=(select COUNT(*) from DANE_KLIENT as DK inner join
							RYZYKO_KLIENT as RK on DK.nr=RK.nr and DK.POZIOM=@poziom and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='małe')/@Tl
				set @PjtL2=(select COUNT(*) from DANE_KLIENT as DK inner join
							RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM=@poziom and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='duże'))/@Tl
			end
			ELSE
			BEGIN
				set @PjtL1=0
				set @PjtL2=0
			END
			if @Tp<>0
			begin
				set @PjtP1=(select COUNT(*) from DANE_KLIENT as DK inner join
							RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM<>@poziom and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='małe'))/@tp
				set @PjtP2=(select COUNT(*) from DANE_KLIENT as DK inner join
							RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM<>@poziom and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='duże'))/@tp
			end
			ELSE
			BEGIN
				set @Pjtp1=0
				set @PjtP2=0
			END

			set @wynik=2*@PL*@PP*(abs(@pjtL1-@PjtP1)+abs(@pjtL2-@PjtP2))
			
			
		end 
		else
		begin
			declare @poziom2 float

			set @rodzaj= (select kategoria from DANE_PODZIAL where Nr_podzialu=@podzial)
			set @poziom2= (select lewa_kategoria from DANE_PODZIAL where Nr_podzialu=@podzial)
			set @Tl=(select COUNT(*) from DANE_KLIENT as DK inner join 
					RYZYKO_KLIENT as RK on RK.NR=DK.NR and DK.POZIOM<=@poziom2 and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and rk.Nazwa_w=@wierzcholek)
			set @Tp=@uczacy-@Tl
			set @Pl=@Tl/@uczacy
			set @Pp=@Tp/@uczacy

			if @Tl<>0
			begin
				set @PjtL1=(select COUNT(*) from DANE_KLIENT as DK inner join
							RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM <=@poziom2 and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='małe'))/@Tl
				set @PjtL2=(select COUNT(*) from DANE_KLIENT as DK inner join
							RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM <=@poziom2 and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='duże'))/@Tl
			end
			ELSE
			BEGIN
				set @PjtL1=0
				set @PjtL2=0
			END
			if @Tp<>0
			begin
				set @PjtP1=(select COUNT(*) from DANE_KLIENT as DK inner join
							RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM >@poziom2 and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='małe'))/@tp
				set @PjtP2=(select COUNT(*) from DANE_KLIENT as DK inner join
							RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM >@poziom2 and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='duże'))/@tp
				set @wynik=2*@PL*@PP*(abs(@pjtL1-@PjtP1)+abs(@pjtL2-@PjtP2))
			end
			ELSE
			BEGIN
				set @Pjtp1=0
				set @PjtP2=0
			END
		end
		
	insert into dbo.miara_optymalnosci values(@podzial,@Pl,@Pp,@wynik)
	set @podzial=@podzial+1
	end
commit tran
end

declare @tekst float
if (select top(1) podzial from Miara_optymalnosci where miara_optymalnosci=(select max(miara_optymalnosci) from miara_optymalnosci))=1 and
	(select Miara_optymalnosci from miara_optymalnosci where podzial=1)=0 
begin
	set @tekst=null
end
else
begin
	set @tekst=(select top(1) podzial from Miara_optymalnosci where miara_optymalnosci=(select max(miara_optymalnosci) from miara_optymalnosci))
	print @tekst
end

Update W_drzewa
	set REGULA=@tekst 
	where NAZWA_W=@wierzcholek


drop table Miara_optymalnosci

end

---------------------------------------------------------


ALTER PROC [dbo].[NOWE_WIERZCHOLKI_DRZEWA] @ID VARCHAR(50),@IDL_POTOMKA VARCHAR(50),@IDP_POTOMKA VARCHAR(50)
AS
BEGIN
DECLARE @LICZNIK INT
DECLARE @ID_W VARCHAR(50)
DECLARE @L_POTOMEK VARCHAR(50)
DECLARE @P_POTOMEK VARCHAR(50)
DECLARE @ID_PODZIALU NVARCHAR(10)
DECLARE @RODZAJ  VARCHAR(50)
DECLARE @WARTOSC VARCHAR(50)
SET @ID_W=@ID
SET @L_POTOMEK=@IDL_POTOMKA 
SET @P_POTOMEK=@IDP_POTOMKA 
UPDATE W_DRZEWA SET L_POTOMEK=@L_POTOMEK ,P_POTOMEK=@P_POTOMEK WHERE NAZWA_W=@ID_W
--UPDATE W_DRZEWA SET L_POTOMEK='L'+@ID_W ,P_POTOMEK='P'+@ID_W WHERE NAZWA_W=@ID_W
SET @ID_PODZIALU=(SELECT REGULA FROM W_DRZEWA WHERE NAZWA_W=@ID_W)
--SET @L_POTOMEK=(SELECT L_POTOMEK FROM W_DRZEWA WHERE NAZWA_W=@ID_W)
--SET @P_POTOMEK=(SELECT P_POTOMEK FROM W_DRZEWA WHERE NAZWA_W=@ID_W)
SET @LICZNIK=(SELECT COUNT(*)+1 FROM W_DRZEWA)
INSERT INTO W_DRZEWA VALUES (@L_POTOMEK,@ID_W,NULL,NULL,NULL,@LICZNIK,NULL)
SET @LICZNIK=(SELECT COUNT(*)+1 FROM W_DRZEWA)
INSERT INTO W_DRZEWA VALUES (@P_POTOMEK,@ID_W,NULL,NULL,NULL,@LICZNIK,NULL)
SET @RODZAJ=(SELECT KATEGORIA FROM DANE_PODZIAL WHERE Nr_podzialu=@ID_PODZIALU)
SET @WARTOSC=(SELECT LEWA_KATEGORIA FROM DANE_PODZIAL WHERE Nr_podzialu=@ID_PODZIALU)
IF
(SELECT OPERATOR FROM DANE_PODZIAL WHERE Nr_podzialu=@ID_PODZIALU)='IN'
BEGIN
UPDATE RYZYKO_KLIENT SET Nazwa_W=@L_POTOMEK  WHERE Nazwa_W=@ID_W AND 
NR IN (SELECT NR FROM DANE_KLIENT WHERE RODZAJ=@RODZAJ AND POZIOM=@WARTOSC)
UPDATE RYZYKO_KLIENT SET Nazwa_W=@P_POTOMEK  WHERE Nazwa_W=@ID_W AND NOT 
NR IN (SELECT NR FROM DANE_KLIENT WHERE RODZAJ=@RODZAJ AND POZIOM=@WARTOSC)
END
ELSE
BEGIN
UPDATE RYZYKO_KLIENT SET Nazwa_W=@L_POTOMEK  WHERE Nazwa_W=@ID_W AND 
NR IN (SELECT NR FROM DANE_KLIENT WHERE RODZAJ=@RODZAJ AND convert(decimal(18,6),POZIOM)<=CONVERT(DECIMAL(18,6),@WARTOSC))
UPDATE RYZYKO_KLIENT SET Nazwa_W=@P_POTOMEK  WHERE Nazwa_W=@ID_W AND 
NR IN (SELECT NR FROM DANE_KLIENT WHERE RODZAJ=@RODZAJ AND convert(decimal(18,6),POZIOM)>CONVERT(DECIMAL(18,6),@WARTOSC))
END
/*UPDATE W_DRZEWA SET REGULA=(SELECT OPTYMALNA_REGULA FROM OPTYMALNE_REGULY
WHERE OPTYMALNE_REGULY.NAZWA_W=@L_POTOMEK)
WHERE W_DRZEWA.NAZWA_W=@L_POTOMEK*/
DECLARE @ILE_GRUP INT
SET @ILE_GRUP=(SELECT COUNT(ILE)
FROM (SELECT COUNT(*)ILE FROM RYZYKO_KLIENT WHERE NAZWA_W=@L_POTOMEK GROUP BY RYZYKO) AS TT)
IF @ILE_GRUP=2 
EXEC OPTYMALNA_REGULA @L_POTOMEK
ELSE 
IF @ILE_GRUP=1
UPDATE W_DRZEWA
SET DECYZJA=(SELECT TOP(1) RYZYKO FROM RYZYKO_KLIENT WHERE NAZWA_W=@L_POTOMEK GROUP BY RYZYKO )
WHERE W_DRZEWA.NAZWA_W=@L_POTOMEK 

/*UPDATE W_DRZEWA SET REGULA=(SELECT OPTYMALNA_REGULA FROM OPTYMALNE_REGULY
WHERE OPTYMALNE_REGULY.NAZWA_W=@P_POTOMEK)
WHERE W_DRZEWA.NAZWA_W=@P_POTOMEK*/
SET @ILE_GRUP=(SELECT COUNT(ILE)
FROM (SELECT COUNT(*)ILE FROM RYZYKO_KLIENT WHERE NAZWA_W=@P_POTOMEK GROUP BY RYZYKO) AS TT)
IF @ILE_GRUP=2 
EXEC OPTYMALNA_REGULA @P_POTOMEK
ELSE 
IF @ILE_GRUP=1
UPDATE W_DRZEWA
SET DECYZJA=(SELECT TOP(1)RYZYKO FROM RYZYKO_KLIENT WHERE NAZWA_W=@P_POTOMEK GROUP BY RYZYKO )
WHERE W_DRZEWA.NAZWA_W=@P_POTOMEK 
END
-----------------------------------------------------------

ALTER PROC [dbo].[TWORZENIE_DRZEWA]
AS
BEGIN

UPDATE RYZYKO_KLIENT
SET NAZWA_W='K'

DELETE W_DRZEWA 
WHERE NAZWA_W<>'K' OR NAZWA_W IS NULL
update RYZYKO_KLIENT
set NAZWA_W='K'
exec optymalna_regula 'K'
DECLARE @WIERZCHOLEK VARCHAR(50),@LP VARCHAR(50), @PP VARCHAR(50)
DECLARE @ILE_GRUP INT
DECLARE @LICZNIK INT
SET @LICZNIK=1
WHILE @LICZNIK<=(SELECT COUNT(*)FROM W_DRZEWA)
BEGIN
SET @WIERZCHOLEK=(SELECT NAZWA_W FROM W_DRZEWA WHERE NR_W=@LICZNIK)
SET @ILE_GRUP=(SELECT COUNT(ILE)
FROM (SELECT COUNT(*)ILE FROM RYZYKO_KLIENT WHERE NAZWA_W=@WIERZCHOLEK GROUP BY RYZYKO) AS TT)
IF @ILE_GRUP=2
BEGIN
SET @LP='L'+@WIERZCHOLEK
SET @PP='P'+@WIERZCHOLEK
EXEC NOWE_WIERZCHOLKI_DRZEWA @WIERZCHOLEK,@LP,@PP
END
SET @LICZNIK=@LICZNIK+1
END
END
--------------------

ALTER PROC [dbo].[KLASYFIKACJA_DRZEWO_TP] @NR_KLIENTA INT
AS
BEGIN
DECLARE @WYNIK VARCHAR(50)
DECLARE @WIERZ VARCHAR(12)
DECLARE @POP_WIERZ VARCHAR(12)
SET @WIERZ='K'
WHILE NOT @WIERZ IS NULL
BEGIN
SET @POP_WIERZ=@WIERZ
IF (SELECT OPERATOR FROM W_DRZEWA, DANE_PODZIAL, NOWY_KLIENT WHERE 
REGULA=NR_PODZIALU AND NAZWA_W=@WIERZ AND RODZAJ=KATEGORIA AND NR=@NR_KLIENTA)='IN'
begin 
IF
(SELECT POZIOM FROM W_DRZEWA, DANE_PODZIAL, NOWY_KLIENT WHERE 
REGULA=NR_PODZIALU AND NAZWA_W=@WIERZ AND RODZAJ=KATEGORIA AND NR=@NR_KLIENTA AND OPERATOR='IN' )=(
SELECT LEWA_KATEGORIA FROM W_DRZEWA, DANE_PODZIAL, NOWY_KLIENT WHERE 
REGULA=NR_PODZIALU AND NAZWA_W=@WIERZ AND RODZAJ=KATEGORIA AND NR=@NR_KLIENTA) 
 SET @WIERZ=(SELECT L_POTOMEK FROM W_DRZEWA WHERE NAZWA_W=@WIERZ)
 ELSE
 SET @WIERZ=(SELECT P_POTOMEK FROM W_DRZEWA WHERE NAZWA_W=@WIERZ)
 end
  ELSE 
  IF
   CONVERT(DECIMAL(18,6),(SELECT POZIOM FROM W_DRZEWA, DANE_PODZIAL, NOWY_KLIENT WHERE 
REGULA=NR_PODZIALU AND NAZWA_W=@WIERZ AND RODZAJ=KATEGORIA AND NR=@NR_KLIENTA AND OPERATOR<>'IN' ))<=CONVERT(DECIMAL(18,6),(
SELECT LEWA_KATEGORIA FROM W_DRZEWA, DANE_PODZIAL, NOWY_KLIENT WHERE 
REGULA=NR_PODZIALU AND NAZWA_W=@WIERZ AND RODZA...
Zgłoś jeśli naruszono regulamin