-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathout.sql
More file actions
86 lines (71 loc) · 2.22 KB
/
Copy pathout.sql
File metadata and controls
86 lines (71 loc) · 2.22 KB
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
CREATE SCHEMA plphp;
-- check an SRF with multiple OUT arguments.
CREATE OR REPLACE FUNCTION plphp.multiple_out(number OUT INTEGER, prefered OUT TEXT) RETURNS SETOF RECORD
AS $$
$result = array(
array(0, 'zero'),
array(1, 'ichi'),
array(2, 'ni'),
array(3, 'san'),
array(4, 'yon'),
array(5, 'go'),
array(6, 'roku'),
array(7, 'nana'),
array(8, 'hachi'),
array(9, 'ku'));
for ($i = 0; $i < 9; $i++) {
return_next($result[$i]);
}
return;
$$ LANGUAGE plphp;
SELECT * FROM plphp.multiple_out();
-- check that INOUT and OUT arguments can be used together.
CREATE OR REPLACE FUNCTION plphp.inout(s OUT INTEGER, a INOUT INTEGER, b INOUT INTEGER)
AS $$
$s = $a;
$a = $b;
$b = $s;
$s += $a;
$$ LANGUAGE plphp;
SELECT * FROM plphp.inout(24, 42);
-- check TABLE arguments. Make sure that both return_next(array) and return_next()
-- work when TABLE arguments are declared.
CREATE OR REPLACE FUNCTION plphp.table_out(lim INTEGER) RETURNS TABLE(number INTEGER, square INTEGER) AS
$$
for ($number = 1; $number <= $lim; $number++) {
$square = $number * $number;
if ($number % 2)
return_next();
else
return_next(array($number, $square));
}
$$ LANGUAGE plphp;
SELECT * FROM plphp.table_out(10);
-- check an OUT function returning invalid values
CREATE OR REPLACE FUNCTION plphp.out_invalid(a OUT INTEGER, "long identifier" OUT INTEGER) AS
$$
return(array(1,2));
$$ LANGUAGE plphp;
SELECT * FROM plphp.out_invalid();
-- INOUT parameters in procedures: a procedure's result is always a record
-- (even with one INOUT), returned via the same assignment convention
CREATE PROCEDURE proc_one(INOUT x int) LANGUAGE plphp AS $$
$x = $x + 1;
$$;
CALL proc_one(41);
CREATE PROCEDURE proc_multi(INOUT x int, INOUT y text) LANGUAGE plphp AS $$
$x = $x * 2;
$y = strrev($y);
$$;
CALL proc_multi(21, 'ko');
CREATE PROCEDURE proc_mixed(IN a int, INOUT total int) LANGUAGE plphp AS $$
$total = $a + $total;
$$;
CALL proc_mixed(40, 2);
-- returning an explicit array works too
CREATE PROCEDURE proc_ret(INOUT x int, INOUT y int) LANGUAGE plphp AS $$
return array($x + $y, $x - $y);
$$;
CALL proc_ret(10, 4);
DROP PROCEDURE proc_one(int), proc_multi(int, text),
proc_mixed(int, int), proc_ret(int, int);