Rahmadnet

PL/pgSQL function that returns a table

Jul 24th, 2019
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. create table staffs(
  2.     staff_id int generated by default as identity primary key,
  3.     first_name varchar(50) not null,
  4.     last_name varchar(50) not null,
  5.     email varchar(255) not null unique,
  6.     phone varchar(25) not null,
  7.     salary int not null
  8. );
  9.  
  10. insert into staffs(first_name, last_name, email, phone, salary)
  11. values ('Fabiola','Jackson','[email protected]','(831) 555-5554',1000000);
  12. INSERT into staffs(first_name, last_name, email, phone,salary)
  13. VALUES('Rahmad','Nasution','[email protected]','(831) 555-5554',12000000);
  14. INSERT INTO staffs(first_name, last_name, email, phone, salary)
  15. VALUES('Mireya','Copeland','[email protected]','(831) 555-5555',1000000);
  16. INSERT INTO staffs(first_name, last_name, email, phone, salary)
  17. VALUES('Genna','Serrano','[email protected]','(831) 555-5556',18000000);
  18. INSERT INTO staffs(first_name, last_name, email, phone, salary)
  19. VALUES('Virgie','Wiggins','[email protected]','(831) 555-5557',16000000);
  20. INSERT INTO staffs(first_name, last_name, email, phone, salary)
  21. VALUES('Jannette','David','[email protected]','(516) 379-4444',14500000);
  22. INSERT INTO staffs(first_name, last_name, email, phone, salary)
  23. VALUES('Marcelene','Boyer','[email protected]','(516) 379-4445',11000000);
  24. INSERT INTO staffs(first_name, last_name, email, phone, salary)
  25. VALUES('Venita','Daniel','[email protected]','(516) 379-4446',134000000);
  26. INSERT INTO staffs(first_name, last_name, email, phone, salary)
  27. VALUES('Kali','Vargas','[email protected]','(972) 530-5555',1900000);
  28. INSERT INTO staffs(first_name, last_name, email, phone, salary)
  29. VALUES('Layla','Terrell','[email protected]','(972) 530-5556',130090);
  30. INSERT INTO staffs(first_name, last_name, email, phone, salary)
  31. VALUES('Bernardine','Houston','[email protected]','(972) 530-5557',1600000);
  32.  
  33.  
  34. create or replace function get_staffs(pattern varchar)
  35. returns table(staffs_email varchar,
  36. staffs_salary int
  37. )
  38. as $$
  39. begin
  40.     return query select email, cast (salary as int)
  41.     from staffs
  42.     where email ilike pattern;
  43. end; $$
  44. language 'plpgsql';
  45.  
  46. select * from get_staffs('be%');
  47.  
  48. create or replace function staff(p_pattern varchar, p_salary int)
  49. returns table (staffs_first_name varchar,
  50. staffs_salary int
  51. ) as $$
  52. declare
  53. var_r record;
  54. begin
  55.     for var_r in(select first_name, salary
  56.         from staffs
  57.         where first_name ilike p_pattern and salary = p_salary)
  58. loop
  59.     staffs_first_name := upper (var_r.first_name);
  60.     staffs_salary := var_r.salary;
  61.     return next;
  62. end loop;
  63. end; $$
  64. language 'plpgsql';
  65.  
  66. select * from staff('ra%', 12000000);
  67.  
  68. select * from staffs;
  69.  
  70. drop function staff
Advertisement
Add Comment
Please, Sign In to add comment