blob: 3cceb291939cb74b5567e692b82ce03f51f1c206 (
plain)
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
|
--
-- xc_params
--
-- Tests usage of non-simple variables (specifically record types without
-- %rowtype descriptor) in SQL statements inside a plpgsql function.
--
--
create table prm_emp(empno int, empname varchar);
create function prm_func() returns varchar as
$$
declare emprow record;
begin
insert into prm_emp values (1, 'abcd');
-- Initialize emprow
select into emprow * from prm_emp;
emprow.empname = 'xyz';
emprow.empno = emprow.empno + 1;
-- Test parameter handling in insert.
insert into prm_emp values (emprow.empno, emprow.empname);
-- At the same time, add some rows to be deleted for testing DELETEs
emprow.empno = emprow.empno + 1;
insert into prm_emp values (emprow.empno, 'tobedeleted1');
emprow.empno = emprow.empno + 1;
insert into prm_emp values (emprow.empno, 'tobedeleted2');
-- Test parameter handling for non-shippable UPDATE statement.
emprow.empno = 2;
emprow.empname = ' changed row 2';
-- This will update the 2nd row
update prm_emp set empname = empname || emprow.empname
where (empname || now()) like '%xyz%';
emprow.empname = 'abcd';
-- This will update 1st row
update prm_emp set empname = emprow.empname || ' changed row 1'
where empname = emprow.empname;
-- Test DELETEs. The final rows should not contain these rows.
-- Test shippable DELETEs.
delete from prm_emp where empname = 'tobedeleted1';
-- Test non-shippable DELETEs. Again, now() is used only to make non-shippable.
delete from prm_emp where empname = 'tobedeleted2' and (emprow.empname || now()) is not NULL;
-- Test SELECTs
emprow.empno = -1;
emprow.empname = '%xyz%';
select into emprow * from prm_emp where empname || now() like emprow.empname;
-- Return the SELECTed emp row.
return emprow.empno::text || ' | ' || emprow.empname;
end
$$ language plpgsql;
select prm_func();
-- Show the final rows
select * from prm_emp order by empno;
drop table prm_emp;
drop function prm_func();
|