|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
Salut,
je voudrais savoir s'il était possible de créer des macros afin de lancer des requêtes paramétrables. Je suis amené à faire régulièrement des sélections qui se ressemblent plus ou moins et j'aimerais gagner du temps. Par exemple, pour splitter une table en deux échantillons aléatoires, je fais : Code :
Code :
macro_split (table_totale, t1, t2, 1248, idmembre); |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Oui c'est faisable notamment avec des fonctions en plpgsql.
Dans les fonctions il faudrait utiliser l'instruction EXECUTE qui permet de faire du SQL dynamique c'est-à-dire des requêtes dont certaines parties du genre nom de table ou nom de colonnes proviennent de variables. |
|
|
00
|
|
|
#3 | |
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
Citation:
Seulement on ne peut pas prendre en paramètre des noms de tables. Connais-tu une alternative? |
|
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Inscription : janvier 2006 Messages : 227 ![]() |
bonjour, enutilisant la fonction quote_ident
Code :
execute'....'||quote_ident(v_table)||'...' |
|
|
00
|
|
|
#5 | |||
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Il faut tout d'abord créer une fonction plpgsql.
Le EXECUTE en question n'est pas celui du SQL mais celui du plpgsql, et il n'y a pas de PREPARE à faire. Il y a un exemple ici sur une demande un peu similaire (ça concernait un nom de schéma au lieu d'un nom de table mais le principe est le même): |
|
|
00
|
|
|
#7 | |||
|
Invité de passage
![]() Chargé de référencement Inscription : mai 2011 Messages : 14 ![]() |
Citation:
Code :
On me renvoie une cellule vide alors que quand je fais un simple : Car marche parfaitement. Bref ou est-ce que je me plante? |
|||
|
|
00
|
|
|
#8 |
|
Membre confirmé
![]() Inscription : janvier 2006 Messages : 227 ![]() |
quote_ident(table)
|
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
La fonction est déclarée RETURNS void et n'a pas d'instruction RETURN donc il est normal qu'elle ne retourne rien.
Ce qui n'empêche pas les instructions SQL à l'intérieur de la fonction d'avoir été exécutées. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com