-- 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('barrackfeedanne@abc.com', 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', 'abc@eksisozluk.com', '+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', 'barrackfeedanne@abc.com', '+905330000000', 'C5F7A5G5'); -- Listenin orijinal hali şöyle SELECT * FROM t_lottery_record ORDER BY record_id; --1 Mehmet Kral Ekşici abc@eksisozluk.com +905331231212 C0B1A5F6 2022-10-12 15:30:19.812 --2 Barrack Feedanne barrackfeedanne@abc.com +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('barrackfeedanne@abc.com', 1); -- Bu da tablonun yeni hali SELECT * FROM t_lottery_record ORDER BY record_id; --1 Barrack Feedanne barrackfeedanne@abc.com +905330000000 C5F7A5G5 2022-10-12 15:30:23.360 --2 Mehmet Kral Ekşici abc@eksisozluk.com +905331231212 C0B1A5F6 2022-10-12 15:30:19.812