-- Kazanan kişinin e-mail'ini ve kazanan numara yazılıp ENTER'a basılacak. Bu kadar kolay :)
-- Sunucunun sayıları tek tek okuması ve 10 kez tekrar etmesi işimizi gayet kolaylaştıracak.
SELECT sp_change_winner('[email protected]', 1);
-- Gelin bunu PostgreSQL veritabanında provasını gerçekleştirelim.
-- Tablo tasarımı (Kabaca)
CREATE TABLE t_lottery_record(
record_id SERIAL NOT NULL PRIMARY KEY,
candidate_name TEXT NOT NULL,
candidate_last_name TEXT NOT NULL,
candidate_email TEXT NOT NULL,
candidate_phone TEXT NOT NULL,
stick_code TEXT UNIQUE NOT NULL,
registration_time TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW()
);
-- Sistemdeki 00000001 No'lu kaydın sisteme girilmesi
INSERT INTO t_lottery_record
(candidate_name, candidate_last_name, candidate_email, candidate_phone, stick_code)
VALUES('Mehmet Kral', 'Ekşici', '[email protected]', '+905331231212', 'C0B1A5F6');
-- Sistemdeki 00000002 No'lu kaydın sisteme girilmesi.
INSERT INTO t_lottery_record
(candidate_name, candidate_last_name, candidate_email, candidate_phone, stick_code)
VALUES('Barrack', 'Feedanne', '[email protected]', '+905330000000', 'C5F7A5G5');
-- Listenin orijinal hali şöyle
SELECT * FROM t_lottery_record ORDER BY record_id;
--1 Mehmet Kral Ekşici [email protected] +905331231212 C0B1A5F6 2022-10-12 15:30:19.812
--2 Barrack Feedanne [email protected] +905330000000 C5F7A5G5 2022-10-12 15:30:23.360
-- Hokus pokus'un döndürüleceği fonksiyonu yazıyoruz
CREATE OR REPLACE FUNCTION public.sp_change_winner(p_email TEXT, p_winner_record_id INT)
RETURNS BOOLEAN
LANGUAGE plpgsql
AS $function$
DECLARE
temporary_id INTEGER;
BEGIN
-- Barrack'ın id'sini geçici bir değişkene aldık
SELECT record_id INTO temporary_id FROM t_lottery_record WHERE candidate_email = p_email;
-- Mehmet Kral'ın id'sine -1 vererek boşa çıkardık.
UPDATE t_lottery_record SET record_id = -1 WHERE record_id = p_winner_record_id;
-- Barrack'ın id'sini kazanan id olarak değiştirdik.
UPDATE t_lottery_record SET record_id = p_winner_record_id WHERE record_id = temporary_id;
-- Evvelce -1 yaptığımız Mehmet Kral'ın id'sini Barrack'ın eski id'si olarak değiştirdik.
UPDATE t_lottery_record SET record_id = temporary_id WHERE record_id = -1;
RETURN TRUE;
EXCEPTION WHEN OTHERS THEN
raise notice '% %', SQLERRM, SQLSTATE;
-- Bir aksilik olursa bizi uyarsın
RETURN FALSE;
END;
$function$
;
-- Hokus pokus! Barrack kazanan numaraya sahip artık.
SELECT sp_change_winner('[email protected]', 1);
-- Bu da tablonun yeni hali
SELECT * FROM t_lottery_record ORDER BY record_id;
--1 Barrack Feedanne [email protected] +905330000000 C5F7A5G5 2022-10-12 15:30:23.360
--2 Mehmet Kral Ekşici [email protected] +905331231212 C0B1A5F6 2022-10-12 15:30:19.812