Ik heb de volgende stored procudure (functie) gemaakt in PL/pgSQL. Wanneer ik deze aanroep met de volgende regel:
krijg ik de volgende error
De error onstaat dus bij direct na de if (nieuwe insert van record).
iemand enig idee??
code:
1
| select set_update_permissions(3, 1, 1, 1, 1, 1, 1); |
krijg ik de volgende error
code:
1
2
3
4
5
| NOTICE: test ERROR: syntax error at or near "$1" at character 27 QUERY: insert into permissions ( $1 , permission_type_id, $2 ) VALUES ( $3 , $4 , $5 ) CONTEXT: PL/pgSQL function "set_update_permissions" line 23 at SQL statement |
De error onstaat dus bij direct na de if (nieuwe insert van record).
iemand enig idee??
code:
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
| -- Function: set_update_permissions(group_id int4, c int4, r int4, u int4, d int4, table_id int4, user_id int4)
-- DROP FUNCTION set_update_permissions(group_id int4, c int4, r int4, u int4, d int4, table_id int4, user_id int4);
CREATE OR REPLACE FUNCTION set_update_permissions(group_id int4, c int4, r int4, u int4, d int4, table_id int4, user_id int4)
RETURNS bool AS
$BODY$
DECLARE
record1 record;
record2 record;
perm int;
perm_type int :=0;
BEGIN
-- Kijk of er al een permissie bestaat voor de tabel/groep
FOR record1 IN select p.permission_id as id from permissions as p where p.group_id = $1 and p.table_id = $6
LOOP
perm = record1.id;
END LOOP;
-- Haal het bijbehorende permissie type op
FOR record2 IN select p_t.permission_type_id as id from permission_type as p_t where p_t.c=$2 AND p_t.r=$3 AND p_t.u=$4 AND p_t.d=$5
LOOP
perm_type = record2.id;
END LOOP;
IF perm IS NULL
THEN
-- nieuwe inserten
raise notice 'test';
insert into permissions (group_id, permission_type_id, table_id) VALUES ($1,perm_type,$6);
return TRUE;
ELSE
-- updaten
update permissions set permission_type_id = perm_type where permissions.table_id = $6 and group_id = $1;
return TRUE;
END IF;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION set_update_permissions(group_id int4, c int4, r int4, u int4, d int4, table_id int4, user_id int4) OWNER TO provis; |