PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : PL/pgSQL » Fonctions fournies par un 1/3 qui renvoient un curseur au nom aléatoir » 29/01/2018 15:24:51

Effectivement, j'ai cette notion. J'ai augmenté déjà le memory_limit php :-)

B.

#2 Re : PL/pgSQL » Fonctions fournies par un 1/3 qui renvoient un curseur au nom aléatoir » 29/01/2018 14:53:28

Merci pour le tuyau !
En théorie quand même, mes requêtes sont là pour ramener l'ensemble de ce qu'elles demandent. Mais je garde ça en tête !

B.

#3 Re : PL/pgSQL » Fonctions fournies par un 1/3 qui renvoient un curseur au nom aléatoir » 29/01/2018 10:21:00

Cette fois, ce sera un GRAND GRAND MERCI !
J'y suis !
Je n'aurais jamais abouti sans vous !
Je file continuer mon dev ! 

Bonne journée !

B.

#4 Re : PL/pgSQL » Fonctions fournies par un 1/3 qui renvoient un curseur au nom aléatoir » 29/01/2018 09:59:43

Bon, c'est tout sauf gagné parce que ce genre de requête n'a visiblement pas du tout envie de passer dans un pg_query ... !

B.

#5 Re : PL/pgSQL » Fonctions fournies par un 1/3 qui renvoient un curseur au nom aléatoir » 29/01/2018 09:07:31

Un grand merci !
Il me reste à voir comment passer ce genre de requête via PHP et ça devrait me sortir de l'ornière !

B.

#6 Re : PL/pgSQL » Fonctions fournies par un 1/3 qui renvoient un curseur au nom aléatoir » 28/01/2018 22:17:54

Nous sommes parfaitement d'accord !
Relisez mon premier post, vous verrez que j'avais bien saisi la chose.

Le problème est que si le nom du curseur est aléatoire, comment fait-on ?!?
Tout mon problème est là !

Dans un script, si je ne peux pas récupérer le nom du curseur, alors je ne peux pas faire de fetch all.

Je m'imaginais pouvoir traiter ça comme une sous requête,

FETCH ALL IN (select * in get_data('toto'));

mais ça semble impossible.

Bref, je ne comprends vraiment pas ce concept de retour avec un nom aléatoire qu'il serait impossible de récupérer à coup sûr.

B.

#7 Re : PL/pgSQL » Fonctions fournies par un 1/3 qui renvoient un curseur au nom aléatoir » 28/01/2018 18:48:40

Merci. J'ai bien essayé, mais la réponse avec psql est celle-ci :

   get_data    
--------------------
 <unnamed portal 1>
(1 row)

J'ai demande ceci :

select * from get_data('toto');

Bref, je ne pige pas du tout.
Si je fais un select plus classique sur une table, alors j'ai bien une sortie en tableau des datas.

Bref, je suis paumé !


B.

#8 Re : PL/pgSQL » Fonctions fournies par un 1/3 qui renvoient un curseur au nom aléatoir » 28/01/2018 11:07:03

Bonjour

Merci pour votre réponse !

Voici un exemple caviardé de fonction, elles ont toutes le même genre de structure :

CREATE OR REPLACE FUNCTION GET_DATA (CHARACTER VARYING) RETURNS REFCURSOR
AS

$BODY$
DECLARE
  NA ALIAS FOR $1;
  CURRET REFCURSOR;
BEGIN
    OPEN CURRET FOR
    SELECT blablabla from blablabla ;
  RETURN CURRET;
END;

$BODY$
    LANGUAGE PLPGSQL;

Il me semble effectivement être dans le cas de la page que vous indiquez. Je l'ai lu et relu ces derniers jours. Je n'arrive pas à comprendre comment je peux agir sans modifier la fonction d'origine pour faire en sorte de connaître le nom de sortie du curseur.
Merci pour vos lumières !

Bertrand B.

#9 PL/pgSQL » Fonctions fournies par un 1/3 qui renvoient un curseur au nom aléatoir » 27/01/2018 13:58:53

bertrandb
Réponses : 16

Bonjour à tous !

Rapide mot de présentation pour le nouveau que je suis  : créateur de sites web médicaux depuis 20 ans, pour le loisir, je découvre postgre en collaborant pour mon projet de logiciel open source médical avec un tiers fournisseur de base de données médicamenteuse.
L'API d'interaction avec la base postgre est un fichier sql de fonctions pgSQL. Expérience nouvelle pour ce qui me concerne.

Mon souci : les fonctions fournies par le 1/3 renvoient toutes un curseur. Comme cela figure partout dans les exemples que je trouve, mon problème est que le nom de ce curseur est aléatoire.   
Mon seul désir c'est d'extraire en PHP les résultats, sans autre forme d'interrogation ou d'arrière pensée.
Quand j'ai le nom du curseur, je pense avoir compris qu'il fallait faire ça :

BEGIN; SELECT get_data('param1', 'param2');FETCH ALL IN "nomDuCurseur";COMMIT;  et c'est plié.

Mais comme je n'ai pas le nom du curseur, ça semble infiniment plus compliqué ! En tout cas, j'y ai passé la journée d'hier sans aboutir.
L'idée principale, il y a plus de 100 fonctions différentes, serait d'avoir quelque chose de générique pour ne pas réécrire une fonction pour chacune des originales. J'en suis très loin. J'ai essayé beaucoup (beaucoup) de choses. Je pense être passé à côté d'un truc fondamental, parce que j'en suis à imaginer des usines à gaz ... ça semble trop compliqué pour un usage qui est probablement extrêmement banal.

Bref il est temps de m'en remettre à la communauté, et c'est donc ce que je suis venu faire ici. 
Merci par avance à ceux qui me donneront un coup de pouce !

BertrandB

Pied de page des forums

Propulsé par FluxBB