Vous n'êtes pas identifié(e).
Pages : 1
Dommage ...
Je vais essayer de coder un truc alors...
Merci
Bonjour,
Je cherche a lister les dépendances entre mes vues, procédures et tables afin de repérer les trop longue dépendances.
Je me base pour ce faire sur les tables système (pg_depend) par contre cette table ne comprend pas les procédures.
Est-ce posible d'avoir une requête qui liste les dépendances comme l'outil "Rechercher des objets" de postgresql ?
Ou est-ce quelqu'un a pensé à un script pour ce faire ?
Merci d'avance
Bonjour,
Je souhaite faire une requete mais plus que de belle parole, voici un exemple car je l'ai tourné dans tout les sens... un oeil neuf serait le bienvenu
j'ai une table de ce style :
chs_1 | chs_2
--------------------
101 | 10001
101 | 10002
101 | 10003
101 | 10004
202 | 20001
202 | 20002
202 | 20003
202 | 20004
202 | 20005
202 | 20006
et je souhaite avoir les n derniers enregstrements (par exempel 3) pour chaque valeur de la colonne chs_1 :
101 | 10004
101 | 10003
101 | 10002
202 | 20006
202 | 20005
202 | 20004
Si vous avez une idée, merci bcp
Bonjour,
Je suis en train de jouer avec la fonction Crosstab, la requête (ci-dessous) fonctionne mais je me demande si il ne serait pas possible de passer quelque chose de plus simple que d'énumérer chaque champs de sortie pour colonne. Par exemple pouvoir déclarer une requête ou un tableau ( au lieu de "1" double precision, "2" double precision, "3" double precision,) ?..
voici ma requête :
select * from crosstab(
'select prdt , element , valeur from table1 order by 1,2',
'select idelement from table2 order by idelement'
) as (
row_id text,
"1" double precision,
"2" double precision,
"3" double precision,
"8" double precision,
"10" double precision,
"11" double precision
)
Merci d'avance
Merci pour cette réponse,
effectivement si je précise la liste des colonnes dans la requête appelant la fonction, ça fonctionne.
Seulement ça déporte mon problème car je ne sais pas combien de champs je doit préciser dans ma fonction appelante... Ou alors il
faudrait que je puisse passer un tableau ou un select dans la liste des champs temporaire du genre :
select * from f1() tmp(c1 integer, array_to_string(array(select champs from table)));
Bonjour,
Je souhaite écrire une procédure dont je ne connais pas à l'avance le nombre de sorties (OUT) car la requête la constituant est
construite en dynamique...
expl:
CREATE OR REPLACE FUNCTION p_test()
RETURNS setof record AS
$BODY$
DECLARE
rec RECORD;
txtquery text;
i integer;
_tab_element text[];
_tab_idelement integer[];
BEGIN
i=0;
for rec in (select idelement,element from elements)
loop
_tab_idelement[i] = rec.idelement;
_tab_element[i] = rec.element;
i = i +1;
end loop;
txtquery := 'select chp1,chp2';
FOR i IN 0..array_length(_tab_element,1)-1 LOOP
-- ajout de champs dans mon select selon les valeurs renseignées dans le tableau
txtquery := txtquery || ',' || _tab_element[i] || '.taux as ' || _tab_element[i];
END LOOP;
txtquery :=txtquery || ' FROM table ';
return query execute txtquery;
END;
$BODY$
LANGUAGE plpgsql STABLE
COST 100;
ALTER FUNCTION p_etat_stocks_suivi_compo()
Est-ce possible ? car pour l'instant voici la sortie de mon appel de procédure :
ERREUR: une liste de définition de colonnes est requise pour les fonctions renvoyant un « record »
Merci
C'est dû potentiellement à l'erreur classique du paramètre de fonction qui a le même nom qu'une colonne utilisée dans la requête. (ici idauge)
Essaie en changeant le nom du paramètre.
J'ai fais le test, ca marche !!
Merci beaucoup, je m'attendais a tout sauf à ça !!! ...
J'ai beaucoup d'autres procédures ou c'est la cas et elles fonctionnent trés bien! Les mystères de l'informatique parfois!
Je suis totalement d'accord pour la requete, je l'ai donnée à titre d'exemple.
Ce qui ne fonctionne pas, c'est son appel avec la procédure...
Par exemple ma requete (simplifiée) :
WITH tmp_table1 AS (
SELECT idauge
FROM auges a
WHERE idtypeauge=1
ORDER BY idauge
),
tmp_table2 AS (
SELECT idauge
FROM auges
where idauge not in (select idauge from tmp_table1)
ORDER BY idauge
)
SELECT idauge FROM tmp_table2
Cette requête renvoi une vingtaine d'enregistrements. Je l’insère dans une procédure :
CREATE OR REPLACE FUNCTION test(OUT idauge integer)
RETURNS SETOF record AS
$BODY$
DECLARE
rec record;
BEGIN
FOR rec IN (
WITH tmp_table1 AS (
SELECT idauge
FROM auges a
WHERE idtypeauge=1
ORDER BY idauge
),
tmp_table2 AS (
SELECT idauge
FROM auges
where idauge not in (select idauge from tmp_table1)
ORDER BY idauge
)
SELECT idauge FROM tmp_table2)
LOOP
idauge := rec.idauge;
RETURN NEXT;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION test OWNER TO xxx;
Mais l'appel à cette procédure ne me renvoie pas mes enregistrement contrairement à des procédure similaire mais sans le WITH...
Bonjour,
J'ai une requête utilisant WITH qui fonctionne (elle me retourne bien les résultat attendus) par contre lorsque
je me sers de cette même requête dans une procédure, l'appel de ma procédure ne me renvoie rien...
Y a t-il un lien avec le fait que WITH génère des tables 'temporaires' ?
Merci d'avance
Finalement mon choix est fait alors : script !!
Merci
Le langage PLPgSQL ne permet pas de le faire.
Si vous tenez vraiment à faire cela, vous devez passer soit par une procédure en C, soit un langage PL plus avancé comme PLPerl..
Merci pour cette réponse rapide, au moins c'est clair! ;-)
Je vais donc peut être voir pour une procédure en C ou me faire un script a part...
Bonne journée !
Bonjour,
Je souhaiterais supprimer un fichier de mon linux en passant pas une procédure stockée.
Est-il possible de le faire ? soit en le supprimant directement, soit en appelant un script ??
J'ai cherché sur le net, je ne trouve pas mon bonheur...
Merci d'avance
Ok, merci ca marche nickel !
Bonjour,
je souhaite créer une fonction avec comme paramètres d'entrée le nom d'une table et le nom d'une colonne.
De quel type puis-je déclarer mes paramètres pour les passer directement dans une requête ??
Pages : 1