Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- RETURN QUERY EXECUTE 'some dynamic query'
- RETURN QUERY EXECUTE 'some dynamic query'
- GET DIAGNOSTICS variable = ROW_COUNT;
- IF variable < 10 THEN
- # I don't know what to do here or how to accomplish this
- END IF;
- EXECUTE 'dynamic query';
- GET DIAGNOSTICS variable = ROW_COUNT;
- IF variable >= 10 THEN
- RETURN QUERY EXECUTE 'dynamic query';
- END IF;
- test=> CREATE OR REPLACE FUNCTION temptabl(cnt integer)
- RETURNS SETOF integer AS
- $body$
- BEGIN
- CREATE TEMPORARY TABLE tmp_container ON COMMIT DROP AS
- SELECT a
- FROM generate_series(1, cnt) t(a);
- IF (SELECT count(1) FROM tmp_container) > 5
- THEN
- RETURN QUERY SELECT a FROM tmp_container;
- END IF;
- END;
- $body$
- LANGUAGE plpgsql;
- test=> SELECT * FROM temptabl(4);
- temptabl
- ----------
- (0 rows)
- test=> SELECT * FROM temptabl(6);
- temptabl
- ----------
- 1
- 2
- 3
- 4
- 5
- 6
- (6 rows)
- CREATE OR REPLACE FUNCTION f_min_records(min_ct integer = 10) -- default minimum 10
- RETURNS SETOF tbl AS
- $func$
- DECLARE
- row_ct int;
- BEGIN
- RETURN QUERY EXECUTE 'some dynamic query (matching return type)';
- GET DIAGNOSTICS row_ct = ROW_COUNT;
- IF row_ct < min_ct THEN
- RAISE EXCEPTION 'Only % rows! Requested minimum was %.', row_ct, min_ct;
- END IF;
- END
- $func$ LANGUAGE plpgsql;
- SELECT * FROM f_min_records_wrapper();
- CREATE OR REPLACE FUNCTION f_min_records(min_ct integer = 10) -- default minimum 10
- RETURNS SETOF t AS
- $func$
- DECLARE
- row_ct int;
- BEGIN
- RETURN QUERY EXECUTE 'SELECT * from t'; -- some dynamic query (matching return type)
- GET DIAGNOSTICS row_ct = ROW_COUNT;
- IF row_ct < min_ct THEN
- RAISE SQLSTATE 'BRRRR' -- 5 ASCII chars
- USING MESSAGE = format('Only %s rows! Requested minimum was %s.', row_ct, min_ct);
- END IF;
- END
- $func$ LANGUAGE plpgsql;
- CREATE OR REPLACE FUNCTION f_min_records_wrapper(min_ct integer = 10)
- RETURNS SETOF t AS
- $func$
- BEGIN
- RETURN QUERY
- SELECT * from f_min_records(min_ct);
- EXCEPTION
- WHEN SQLSTATE 'BRRRR' THEN
- RAISE NOTICE '%', SQLERRM; -- optionally pass error msg
- END
- $func$ LANGUAGE plpgsql;
- SELECT * FROM f_min_records_wrapper(17);
- CREATE OR REPLACE FUNCTION f_temptbl(min_ct integer = 10)
- RETURNS SETOF t AS
- $func$
- DECLARE
- row_ct int;
- BEGIN
- DROP TABLE IF EXISTS _temptbl; -- for mult. calls in 1 transaction
- CREATE TEMP TABLE _temptbl (LIKE t) ON COMMIT DROP; -- match RETURNS type
- EXECUTE 'INSERT INTO _temptbl SELECT * FROM t'; -- text with dyn SQL
- GET DIAGNOSTICS row_ct = ROW_COUNT;
- IF row_ct >= min_ct THEN
- RETURN QUERY TABLE _temptbl;
- END IF;
- END;
- $func$ LANGUAGE plpgsql;
- RETURN CANCEL;
- RETURN CANCEL 10;
Add Comment
Please, Sign In to add comment