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 » merci de déplacer dans la bonne catégorie svp » 24/02/2021 13:52:56

Bonjour, voila ce que j'aimerai que la fonctions fasse.

create or replace function comptageLignes(nomtable varchar) returns integer AS $$
DECLARE
nombreLignes integer;
BEGIN

    PERFORM (EXECUTE 'SELECT COUNT(*) FROM ' || $1);
    if (FOUND is false) then
        return false;
    else
            EXECUTE 'SELECT COUNT(*) FROM ' || $1 INTO nombreLignes;
            return nombreLignes;
    end if;

END;
$$ language PLPGSQL;

Cela dit la ligne avec le PERFORM et le EXECUTE n'est pas faisable et me renvoie une erreur.
Il y aurait un autre equivalent correct à cette ligne ?

Merci d'avance

#2 Re : PL/pgSQL » merci de déplacer dans la bonne catégorie svp » 23/02/2021 22:21:29

Select count(*) into

Bonsoir, donc supposons que je souhaite faire une fonction qui vérifie uniquement l'existance d'une table, avec son nom passé en paramètre.
(sans prendre en compte les contraintes ou complication ou nombre de ligne trop élevé)
Cela donnerai :

create or replace function verifExistTable (varchar) returns integer AS $$
DECLARE
nombreLignes integer;
BEGIN
     /*que dois je mettre ici ?*/
END;
$$ language PLPGSQL;


requete que je tape :
select comptageLignes('Bookbay.auteurs');

Dois je utiliser :  reltuples float4 ?

Merci d'avance

#3 Re : PL/pgSQL » merci de déplacer dans la bonne catégorie svp » 22/02/2021 18:56:35

En fait ce que j'aimerai faire ca serait ca :

create or replace function comptageLignes(nomtable varchar) returns integer AS $$
DECLARE
nombreLignes integer;
BEGIN
    IF EXISTS (execute 'SELECT COUNT(*) FROM ' || $1) THEN
           execute 'SELECT COUNT(*) FROM ' || $1 INTO nombreLignes;
               return nombreLignes;
    else
           return 0;
    end if;

END;
$$ language PLPGSQL;

Donc je voudrais tester l'existence de la table dans le IF, si elle existe afficher le nombre de lignes dans la table, dans le cas contraire retourner 0

Ce que j'ai en affichage : ERREUR:  erreur de syntaxe sur ou près de « execute »
LIGNE 47 :  IF EXISTS (execute 'SELECT COUNT(*) FROM ' || $1) THEN

#4 PL/pgSQL » merci de déplacer dans la bonne catégorie svp » 22/02/2021 18:45:12

sousou
Réponses : 6

Bonjour, je cherche a creer une fonction qui prends en paramètre un nom de table et qui vérifie si la table existe bien, dans le cas ou elle existe, affiche le nombre de ligne de la table.
Voici le code que j'ai pour l'instant :

create or replace function comptageLignes(varchar) returns integer AS $$
DECLARE
nombreLignes integer;
BEGIN

//Passage qui doit verifier si la table existe, si non retourner 0 ou un message d'erreur.
.....
......

//Ensuite le cas ou la table existe :
    EXECUTE 'SELECT COUNT(*) FROM ' || $1 INTO nombreLignes;
    RETURN nombreLignes;
END;
$$ language PLPGSQL;

Je ne parviens pas à vérifier l'existance de la table puisque le nom de la table est passé en paramètre donc je dois forcément utiliser un EXECUTE mais impossible d'utiliser EXECUTE avec un IF ou un PERFORM.
Merci d'avance pour vos réponses

Pied de page des forums

Propulsé par FluxBB