Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Problème "colonne n'existe pas" / function plsql


Sujet :

Requêtes PostgreSQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2018
    Messages : 29
    Points : 32
    Points
    32
    Par défaut Problème "colonne n'existe pas" / function plsql
    Bonjour,

    Je dois faire une fonction qui renvoie le nombre de ligne d'une table.
    Voila ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    DROP TABLE IF EXISTS test;
     
    CREATE TABLE test(
        id serial,
        nom varchar
    );
     
    INSERT INTO test VALUES(default, 'Thomas');
    INSERT INTO test VALUES(default, 'Cédric');
    INSERT INTO test VALUES(default, 'David');
    INSERT INTO test VALUES(default, 'Nicolas');
     
    DROP FUNCTION IF EXISTS number_line(varchar);
     
    CREATE FUNCTION
    number_line(nom_table varchar)
    RETURNS integer AS $$
    DECLARE
        n integer;
    BEGIN
        SELECT INTO n
            COUNT(*)
            FROM nom_table;
        RETURN n;
    END;
    $$ LANGUAGE plpgsql;
    Seulement j'obtient l'erruer suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BDD=# select number_line(test);
    ERREUR:  la colonne « test » n'existe pas
    LIGNE 1 : select number_line(test);
    Pourriez-vous m'aider?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    8 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 8 259
    Points : 26 731
    Points
    26 731
    Par défaut
    Deux problèmes :
    1. test n'est pas une chaîne de caractères.
      'test' en est une.
    2. Dans la fonction number_line, il faut utiliser du SQL dynamique.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2018
    Messages : 29
    Points : 32
    Points
    32
    Par défaut
    Merci de ton aide.

    Du coup, en cherchant sur le net (https://stackoverflow.com/questions/...as-a-parameter)j'en suis venu à écrire cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE OR REPLACE FUNCTION
    number_line(nom_table varchar)
    RETURNS integer AS $$
    DECLARE
        query varchar;
        n integer;
    BEGIN
        query := 'SELECT INTO n COUNT(*) FROM' || nom_table;
        EXECUTE IMMEDIATE query;
        RETURN n;
    END;
    $$ LANGUAGE plpgsql;
    Seulement la même erreur persiste.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    8 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 8 259
    Points : 26 731
    Points
    26 731
    Par défaut
    C'est sans doute que la première erreur n'a pas été corrigée
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre actif
    Profil pro
    Administrateur
    Inscrit en
    mai 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2008
    Messages : 146
    Points : 255
    Points
    255
    Par défaut
    Votre requête est mal construite

    Citation Envoyé par Zyxcel314 Voir le message
    Merci de ton aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        query := 'SELECT INTO n COUNT(*) FROM' || nom_table;
        EXECUTE IMMEDIATE query;
    Faites plutôt ceci
    Et n'ouliez pas l'espace après le FROM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
        query := 'SELECT COUNT(*) FROM ' || nom_table;
        EXECUTE query INTO n;
        RETURN n;
    Testez comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT number_line('test')

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème SQLCMD : Base n'existe pas
    Par plopi dans le forum Outils
    Réponses: 6
    Dernier message: 11/11/2013, 15h15
  2. Null sur une colonne qui existe pas
    Par punisher999 dans le forum NHibernate
    Réponses: 0
    Dernier message: 27/06/2012, 18h49
  3. [Postgres] La colonne n'existe pas
    Par vseb99 dans le forum Hibernate
    Réponses: 1
    Dernier message: 14/07/2009, 01h15
  4. Réponses: 2
    Dernier message: 06/07/2009, 15h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo