1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
CREATE OR REPLACE PROCEDURE test_sp1(f1 int, f2 varchar(20))
AS $$
DECLARE
min_val int;
BEGIN
DROP TABLE IF EXISTS tmp_tbl;
CREATE TEMP TABLE tmp_tbl(id int);
INSERT INTO tmp_tbl values (f1),(10001),(10002);
SELECT INTO min_val MIN(id) FROM tmp_tbl;
RAISE INFO 'min_val = %, f2 = %', min_val, f2;
END;
$$ LANGUAGE plpgsql
SECURITY INVOKER;
CREATE OR REPLACE PROCEDURE test_sp2(f1 IN int, f2 INOUT varchar(256), out_var OUT varchar(256))
AS $$
DECLARE
loop_var int;
BEGIN
IF f1 is null OR f2 is null THEN
RAISE EXCEPTION 'input cannot be null';
END IF;
DROP TABLE if exists my_etl;
CREATE TEMP TABLE my_etl(a int, b varchar);
FOR loop_var IN 1..f1 LOOP
insert into my_etl values (loop_var, f2);
f2 := f2 || '+' || f2;
END LOOP;
SELECT INTO out_var count(*) from my_etl;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE PROCEDURE test_sp_nonatomic ()
NONATOMIC
AS $$
BEGIN
SELECT 1;
END;
$$ LANGUAGE plpgsql
SECURITY INVOKER;
CREATE PROCEDURE etl.test_sp_na (param1 int)
NONATOMIC
AS $$
BEGIN
INSERT INTO test_table VALUES (param1);
COMMIT;
SELECT param1;
END;
$$ LANGUAGE plpgsql;
CREATE PROCEDURE test_set_config()
AS $$
BEGIN
SELECT 1;
END;
$$ LANGUAGE plpgsql
SET work_mem = '256MB';
|