Facebook
From Mömötö, 1 Year ago, written in PostgreSQL.
This paste is a reply to Change Winner from ilkercruiser - view diff
Embed
Download Paste or View Raw
Hits: 222
  1. -- Kazanan kişinin e-mail'ini ve kazanan numara yazılıp ENTER'a basılacak. Bu kadar kolay :)
  2. -- Sunucunun sayıları tek tek okuması ve 10 kez tekrar etmesi işimizi gayet kolaylaştıracak.
  3. SELECT sp_change_winner('[email protected]', 1);
  4.  
  5. -- Gelin bunu PostgreSQL veritabanında provasını gerçekleştirelim.
  6.  
  7. -- Tablo tasarımı (Kabaca)
  8. CREATE TABLE t_lottery_record(
  9.         record_id SERIAL NOT NULL PRIMARY KEY,
  10.         candidate_name TEXT NOT NULL,
  11.         candidate_last_name TEXT NOT NULL,
  12.         candidate_email TEXT NOT NULL,
  13.         candidate_phone TEXT NOT NULL,
  14.         stick_code TEXT UNIQUE NOT NULL,
  15.         registration_time TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW()
  16. );
  17.  
  18. -- Sistemdeki 00000001 No'lu kaydın sisteme girilmesi
  19. INSERT INTO t_lottery_record
  20. (candidate_name, candidate_last_name, candidate_email, candidate_phone, stick_code)
  21. VALUES('Mehmet Kral', 'Ekşici', '[email protected]', '+905331231212', 'C0B1A5F6');
  22.  
  23. -- Sistemdeki 00000002 No'lu kaydın sisteme girilmesi.
  24. INSERT INTO t_lottery_record
  25. (candidate_name, candidate_last_name, candidate_email, candidate_phone, stick_code)
  26. VALUES('Barrack', 'Feedanne', '[email protected]', '+905330000000', 'C5F7A5G5');
  27.  
  28. -- Listenin orijinal hali şöyle
  29. SELECT * FROM t_lottery_record ORDER BY record_id;
  30. --1     Mehmet Kral     Ekşici [email protected]      +905331231212   C0B1A5F6        2022-10-12 15:30:19.812
  31. --2     Barrack Feedanne        [email protected] +905330000000   C5F7A5G5        2022-10-12 15:30:23.360
  32.  
  33.  
  34. -- Hokus pokus'un döndürüleceği fonksiyonu yazıyoruz
  35. CREATE OR REPLACE FUNCTION public.sp_change_winner(p_email TEXT, p_winner_record_id INT)
  36.  RETURNS BOOLEAN
  37.  LANGUAGE plpgsql
  38. AS $function$
  39. DECLARE
  40.     temporary_id INTEGER;
  41.         BEGIN
  42.                 -- Barrack'ın id'sini geçici bir değişkene aldık
  43.                 SELECT record_id INTO temporary_id FROM t_lottery_record WHERE candidate_email  = p_email;
  44.                 -- Mehmet Kral'ın id'sine -1 vererek boşa çıkardık.
  45.                 UPDATE t_lottery_record SET record_id = -1 WHERE record_id = p_winner_record_id;
  46.                 -- Barrack'ın id'sini kazanan id olarak değiştirdik.
  47.                 UPDATE t_lottery_record SET record_id = p_winner_record_id WHERE record_id = temporary_id;
  48.                 -- Evvelce -1 yaptığımız Mehmet Kral'ın id'sini Barrack'ın eski id'si olarak değiştirdik.
  49.                 UPDATE t_lottery_record SET record_id = temporary_id WHERE record_id = -1;
  50.                 RETURN TRUE;
  51.                 EXCEPTION WHEN OTHERS THEN
  52.                         raise notice '% %', SQLERRM, SQLSTATE;
  53.                         -- Bir aksilik olursa bizi uyarsın
  54.                         RETURN FALSE;
  55.                
  56.         END;
  57. $function$
  58. ;
  59.  
  60. -- Hokus pokus! Barrack kazanan numaraya sahip artık.
  61. SELECT sp_change_winner('[email protected]', 1);
  62.  
  63. -- Bu da tablonun yeni hali
  64. SELECT * FROM t_lottery_record ORDER BY record_id;
  65. --1     Barrack Feedanne        [email protected] +905330000000   C5F7A5G5        2022-10-12 15:30:23.360
  66. --2     Mehmet Kral     Ekşici [email protected]      +905331231212   C0B1A5F6        2022-10-12 15:30:19.812
  67.