Safiron

1. příklad - Funkce

Mar 25th, 2012
496
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.67 KB | None | 0 0
  1. USE [student]
  2. GO
  3. /****** Object:  UserDefinedFunction [urb0061].[CheckStaff]    Script Date: 03/24/2012 20:37:20 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. ALTER function [urb0061].[CheckStaff](@p_idUser int, @p_idTrainRide int)
  9. returns varchar(5)
  10. as
  11. begin
  12.     declare @v_confirm int; -- BUDE DRŽET SLOUPCE CONFIRM Z CURSORU C_REZERVATION
  13.     declare @v_idstaff int; -- BUDE DRŽET SLOUPCE IDSTAFF Z CURSORU C_STAFF
  14.     declare @v_counter int; -- POČÍTA POČET PRUCHODU CYKLU KTERÝ POROVNÁVA CONFIRM S IDSTAFF
  15.    
  16.     -- 5 SPOJENÝCH TABULEK, DO KURZORU DAVAM SLOUPEC CONFIRM Z RESERVATION + PODMÍNKA S PARAMETRY FUNKCE
  17.     declare c_reservation cursor for select reservation.confirm from [user]
  18.                     join Reservation on [User].idUser = Reservation.idUser
  19.                     join TrainRide on Reservation.idTrainRide = TrainRide.idTrainRide
  20.                     join TrainCrew on TrainRide.idTrain = TrainCrew.idTrainRide
  21.                     join Staff on TrainCrew.idStaff = Staff.idStaff
  22.                     where [User].idUser = @p_idUser and Reservation.idTrainRide = @p_idTrainRide;
  23.                    
  24.     -- 5 SPOJENÝCH TABULEK, DO KURZORU DAVAM SLOUPEC JEDINEČNÉ HODNOTY ZE SLOUPCE IDSTAFF Z TABULKY STAFF + PODMÍNKA S PARAMETRY FUNKCE
  25.     declare c_staff cursor for select distinct(staff.idstaff) from [user]
  26.                     join Reservation on [User].idUser = Reservation.idUser
  27.                     join TrainRide on Reservation.idTrainRide = TrainRide.idTrainRide
  28.                     join TrainCrew on TrainRide.idTrain = TrainCrew.idTrainRide
  29.                     join Staff on TrainCrew.idStaff = Staff.idStaff
  30.                     where [User].idUser = @p_idUser and Reservation.idTrainRide = @p_idTrainRide;
  31.                        
  32.     set @v_counter = 0; -- NASTAVÍM VÝCHOZÍ HODNOTU                         
  33.     open c_reservation;
  34.    
  35.     fetch next from c_reservation into @v_confirm;
  36.     -- PROCHÁZÍM VŠECHNY CONFIRMY OD DANÉHO UŽIVATELE NA DANÉM TRAINRIDE
  37.     while @@FETCH_status = 0
  38.         begin
  39.             open c_staff
  40.                 fetch next from c_staff into @v_idstaff
  41.                 -- KAŽDY CONFIRM POROVNÁM SE VŠEMI ČLENY POSÁDKY
  42.                 while @@fetch_status = 0
  43.                     begin
  44.                         if @v_confirm = @v_idstaff  -- POKUD NAJDU SHODU NENÍ TŘEBA POKRAČOVAT
  45.                             break;
  46.                         else
  47.                             fetch next from c_staff into @v_idstaff;    -- JINAK POROVNÁVÁM S DALŠÍM ČLENEM POSÁDKY
  48.                             set @v_counter = @v_counter + 1;
  49.                                 if @v_counter = 3   -- POKUD ANI TŘETÍ ČLEN NEPOTVRDIL REZERVACI - NENÍ TŘEBA POKRAČOVAT A VRACÍM FALSE
  50.                                     return 'false'
  51.                     end
  52.                     set @v_counter = 0; -- RESETUJU COUNTER
  53.             close c_staff;         
  54.             fetch next from c_reservation into @v_confirm;  -- JDU NA DALŠÍ REZERVACI
  55.         end
  56.     close c_reservation;   
  57.     return 'true'-- POKUD PROGRAM DOJDE AŽ SEM TAK POKAŽDÉ NAŠEL ČLENA POSÁDKY KTERÝ POTVRDIL REZERVACI -> VRACÍM TRUE
  58. end
Advertisement
Add Comment
Please, Sign In to add comment