Advertisement
Guest User

Untitled

a guest
Oct 9th, 2015
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. CREATE TABLE IF NOT EXISTS sample_table (
  2. id serial,
  3. field1 text,
  4. field2 int,
  5. field3 date
  6. );
  7.  
  8. INSERT INTO sample_table (field1, field2, field3)
  9. SELECT
  10. md5(random()::text),
  11. (random() * 1000)::int,
  12. now() - (((random() * 1000)::int - (random() * 1000)::int) || ' days')::interval
  13. FROM generate_series(1, 1000);
  14.  
  15. CREATE OR REPLACE FUNCTION sample_stored_procedure (
  16. _order_field text = 'id',
  17. _order text = 'ASC',
  18. _limit int = 10,
  19. _offset int = 0
  20. ) RETURNS SETOF sample_table AS $$
  21. DECLARE
  22. sql text := 'SELECT * FROM sample_table';
  23. BEGIN
  24. IF _order NOT IN ('ASC', 'DESC') THEN
  25. _order := 'ASC';
  26. END IF;
  27.  
  28. IF _order_field NOT IN ('id', 'field1', 'field2') THEN
  29. _order_field := 'id';
  30. END IF;
  31.  
  32. sql := sql || ' ORDER BY ' || _order_field || ' ' || _order;
  33.  
  34. IF _offset < 0 THEN
  35. _offset := 0;
  36. END IF;
  37.  
  38. IF _limit < 1 OR _limit > 1000 THEN
  39. _limit := 10;
  40. END IF;
  41.  
  42. sql := sql || ' LIMIT $1 OFFSET $2';
  43.  
  44. RETURN QUERY EXECUTE sql USING _limit, _offset;
  45. END
  46. $$ LANGUAGE plpgsql;
  47.  
  48. SELECT * FROM sample_stored_procedure();
  49.  
  50. SELECT * FROM sample_stored_procedure('field1');
  51.  
  52. SELECT * FROM sample_stored_procedure('field1', 'DESC');
  53.  
  54. SELECT * FROM sample_stored_procedure('field2', 'ASC', 5);
  55.  
  56. SELECT * FROM sample_stored_procedure('field2', 'ASC', 5, 5);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement