Facebook
From Unique Wigeon, 2 Years ago, written in PostgreSQL.
This paste is a reply to Change Winner from ilkercruiser - go back
Embed
Viewing differences between Change Winner and Re: Change Winner
-- 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