es ce que vous savez comment passer en paramètre d'une fonction pl pgsql un attribut d table ou nom de table?
merci
Version imprimable
es ce que vous savez comment passer en paramètre d'une fonction pl pgsql un attribut d table ou nom de table?
merci
Comme n'importe quel autre paramètre, mais de type VARCHAR(n) avec n = 63 si vous n'avez pas modifié la longueur des noms des objets pour la compilation.
Puis exécuter votre requête finale en SQL dynamique.
A +
en sql dynamique c a d EXECUTE ....... ?
vous n'auriez pas un exemple SVP
merci
un exemple avec un select,
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 CREATE OR REPLACE FUNCTION multivaluate_dependancy( left_attribut character varying, right_attribut character varying, tab character varying ) returns boolean as $$ DECLARE i integer ; i1 integer ; bool boolean:=true ; lio character varying; BEGIN EXECUTE 'select ' || left_attribut || ' into lio from '||tab||' where' ||right_attribut|| = 'cameron'; return bool; END; $$LANGUAGE 'plpgsql' SECURITY DEFINER;
exemple qui marche pas
La doc présente un exemple:
Le problème de ta requête plus haut est que le INTO ne doit pas faire partie de la chaîne de requête, il doit être juste après.Code:
1
2
3
4
5
6 EXECUTE 'SELECT count(*) FROM ' || tabname::regclass || ' WHERE insere_par = $1 AND insere <= $2' INTO c USING utilisateur_verifie, date_verifiee;
ça ne marche toujours pas, à quoi sert le || au juste ?
merci
Merçi j'ai trouvé la solution
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
41
42
43
44
45
46 CREATE OR REPLACE FUNCTION multivaluate_dependancy( left_attribut character varying, right_attribut character varying, val character varying, tab character varying ) returns boolean as $$ DECLARE i integer ; i1 integer ; bool boolean:=true ; lio character varying; BEGIN EXECUTE 'select ' || left_attribut || ' from '||tab||' where ' ||right_attribut|| '=' || quote_literal(val) into lio; --EXCUTE 'select count('|| left_attribut ||') from film where acteur = "cameron"'; return bool; END; $$LANGUAGE 'plpgsql' SECURITY DEFINER;