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 :

Comment récupérer les valeurs d'un type de table


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 30
    Points : 24
    Points
    24
    Par défaut Comment récupérer les valeurs d'un type de table
    Bonjour

    Je suis débutante de Postgresql et je suis en train de faire la traduction de PLSQL vers PGSQL , vu que dans PLSQL, on pourrait définir un type d'une table en utilisant %rowtype et table of, ainsi qu'on pourrait récupérer les valeurs d'une colonne ligne par ligne en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type_name[i].colonne_name
    , si j'utilise le même code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type_name[i].colonne_name
    dans Postgresql, il y a toujours une erreur qui dit type n'est pas un array et machan.
    J'ai passé plusieurs jours pour trouver une solution ! Si quelqu'un a une idée, merci beaucoup d'avance !


    Ying

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    create or replace 
    function test_ying_genproc
      (
        PN$strDate  IN VARCHAR , -- date d'appel de la procédure
        PN$strChemin  IN VARCHAR -- chemin vers le répertoire des ressources
      )
    RETURNS void AS $$
     
     
     
    DECLARE
     
     
    Ligne varchar;
     
     
    strSelProspectTab structure%Rowtype;
    strSelProspectTab_NB NUMERIC;
    err numeric := 0;
     
     
     
    begin
     
       SELECT *  INTO strSelProspectTab FROM structure ;
       SELECT count(*) INTO strSelProspectTab_NB FROM structure ;
     
      IF /*strSelProspectTab.count*/ strSelProspectTab_NB <> 0 THEN
        /*FOR i IN strSelProspectTab.first..strSelProspectTab.last*/
    	FOR i IN 1..strSelProspectTab_NB
        LOOP
          BEGIN
            Ligne:=(' --> STRUCTURE : '|| TO_CHAR (i+1, 'FM9999') || ' et la date d''entrée est '||PN$strDate||'et la numéro de table est '||Rtrim(strSelProspectTab[i].sigle)) ;
     
    		PERFORM sa.traitement_logs(Ligne);
     
     
          EXCEPTION
          WHEN OTHERS THEN
    		PERFORM sa.traitement_logs( sqlerrm);
     
    		PERFORM sa.traitement_logs('Problème sur la STRUCTURE de code sages : à la date : '||pn$strdate);
    		PERFORM sa.traitement_logs('Problème sur la STRUCTURE '||TO_CHAR( i + 1, 'FM9999'));
     
            err:=1;
          END;
        END LOOP ;
      END IF;
    end; 
    $$ LANGUAGE plpgsql;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select test_ying_genproc
      (
        '19870102', -- date d'appel de la procédure
        '/TEST/TEMPS'   -- chemin vers le répertoire des ressources
      );


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    NOTICE:  04/02/2013 11:08:33 : cannot subscript type structure because it is not an array
    CONTEXT:  SQL statement "SELECT sa.traitement_logs( sqlerrm)"
    PL/pgSQL function "test_ying_genproc" line 36 at PERFORM

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    J'ai trouvé une solution très sympa!!!

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    L'erreur est, en faisant ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *  INTO strSelProspectTab FROM structure
    de croire que l'interpréteur va charger toutes les lignes de la table et voir strSelProspectTab comme un tableau de lignes.

    En fait, il charge uniquement une ligne.
    C'est dit dans la doc:

    Any result rows after the first row are discarded
    Dans le code montré, la boucle FOR i devrait plutôt concerner directement la variable représentant une ligne de résultat plutôt qu'un indice numérique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FOR strSelProspectTab IN SELECT *  FROM structure LOOP
       -- traitement de la ligne
     END LOOP;

Discussions similaires

  1. Gridview: Comment récupérer les valeurs des deux clés?
    Par Thomas_Laurent dans le forum ASP.NET
    Réponses: 1
    Dernier message: 02/02/2007, 14h54
  2. Réponses: 2
    Dernier message: 11/12/2006, 12h38
  3. Formulaire & Confirm : Comment récupérer les valeurs en javascript ?
    Par dark_vidor dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/11/2006, 18h21
  4. Réponses: 4
    Dernier message: 13/11/2006, 17h49
  5. Réponses: 11
    Dernier message: 19/06/2006, 13h51

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