IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

PostgreSQL Discussion :

erreur sur une procedure plsql


Sujet :

PostgreSQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut erreur sur une procedure plsql
    bonjour à tous

    j'essaie d'écrire une procedure en plsql comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    DECLARE
    BEGIN
    SELECT tablename from pg_tables where tablename not like "pg_%" order by tablename asc;
    FOR each row
    LOOP
    select count(*) as nb from tablename where last_updated_tx_stamp > now();
    if nb > 0
    then RETURN tablename;
    end if;
    END LOOP;
    RETURN;
    END;
    lorsque je l'execute il est ecrit que j'ai une erreur pres de mon select et je ne sais pas pourquoi.

    vous pouvez m'aider?

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Hum hello Diane,

    J'ai du mal à vous suivre :
    1/ êtes-vous bien sur Oracle (je fais référence à la notion PL/SQL) ?
    2/ où avez-vous appris à utiliser now()
    3/ pourquoi utiliser for each row
    4/ enfin vous parlez de procédure et pourtant vous déclarez un bloc anonyme avec DECLARE

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    desolé en fait c'est

    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 pr.f() RETURNS varchar AS $$
    DECLARE
    i RECORD;
    BEGIN
         FOR i IN SELECT tablename from pg_tables where tablename not like 'pg_%'  order by tablename asc LOOP 
    	select count(*) as nb from tablename where last_updated_tx_stamp < now();
    	if nb > 0 then RETURN tablename;
    	end if;
         END LOOP; 
     
    END;
    $$ LANGUAGE plpgsql;
    lorsque j'execute ma fonction il me dit que tablename n'existe pas.
    ce que je fais cé que je prendre toutes les tables de ma base et sur chaque table, je fais une requete.
    evidemment que tablename n'existe pas mais je sais pas comment recuperer la valeur de l'enregistrement stocké ds tablename???

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Personnellement, j'ai du mal à comprendre la logique de ce que tu veux faire : tu sais que tablename n'existe pas et pourtant tu fais une requête SELECT sur cette table ????

    Quel est ton SGBD ? Oracle ? MySQL ?
    Quelle version ?

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    oui j'avais oublié de préciser mon SGBD : postgres

    en fait mon algo est le suivant :

    - je recupère le nom de toutes les tables de ma base qui repondent à une certaine condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select tablename FROM pg_tables WHERE tablename NOT LIKE 'pg_%'  ORDER BY tablename ASC
    - pour chaque nom de table stockée ds la variable tablename j'effectue une autre requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT count(*) AS nb FROM tablename WHERE last_updated_tx_stamp < now();
    si le nombre d'element > 0, je renvoie le nom de la table

    Mon probleme vinet du fait que je ne sais pas comment stocker le nom des tables dans une variable et réutiliser cette variable dans une autre requete.

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par diane535
    Mon probleme vinet du fait que je ne sais pas comment stocker le nom des tables dans une variable et réutiliser cette variable dans une autre requete.
    Sous Oracle, il faut respecter la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT MYCOL
    INTO MYLOCALVAR
    FROM MYTABLE
    WHERE ...

Discussions similaires

  1. [Server SQL 2000] Erreur sur une "stored procedure"
    Par hunteshiva dans le forum MS SQL Server
    Réponses: 17
    Dernier message: 18/03/2011, 15h41
  2. Creation Procedure : erreur sur une clause LIMIT
    Par breuil dans le forum SQL Procédural
    Réponses: 14
    Dernier message: 27/08/2007, 23h44
  3. Réponses: 8
    Dernier message: 01/03/2005, 16h01
  4. Réponses: 4
    Dernier message: 14/06/2004, 16h18
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00

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