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

Requêtes PostgreSQL Discussion :

PLPGSQL : syntaxe 'champ = (INSERT INTO ma_table . . . RETURNING ma_colonne' [9.2]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut PLPGSQL : syntaxe 'champ = (INSERT INTO ma_table . . . RETURNING ma_colonne'
    Bonjour,

    J'ai une erreur de syntaxe sur 'INTO' que je ne comprends pas au moment de la création d'une fonction PLPGSQL :

    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
     
    CREATE OR REPLACE FUNCTION ma_fonction(
        -- mes arguments commençant par '_'
    )
    RETURNS TEXT AS $$
    BEGIN
        IF _id IS NULL THEN
            _id = (
                INSERT INTO ma_table (
                    id,
                    nom,
                    prenom,
                    datedenaissance,
                    sexe
                )
                VALUES (
                    DEFAULT,
                    _nom,
                    _prenom,
                    _datedenaissance,
                    _sexe
                )
                RETURNING id
            );
        ELSE
            UPDATE ma_table
            SET
                nom  = _nom,
                prenom = _prenom,
                datedenaissance= _datedenaissance,
                sexe= _sexe
            WHERE id = _id
            ;
        END IF;
        -- poursuite du traitement des données
        RETURN 'mon texte';
    END;
    $$ LANGUAGE PLPGSQL;
    Le message exact est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ERREUR:  erreur de syntaxe sur ou près de « INTO »
    LINE 28:             INSERT INTO ma_table(
                                ^
     
    ********** Erreur **********
     
    ERREUR: erreur de syntaxe sur ou près de « INTO »
    État SQL :42601
    Caractère : 831
    Merci d'avance pour l'aide apportée !

  2. #2
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut
    Toujours coincé malgré menues modifications qui me paraissaient être les bonnes (':=' et SELECT) :
    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
     
    CREATE OR REPLACE FUNCTION ma_fonction(
        -- mes arguments commençant par '_'
    )
    RETURNS TEXT AS $$
    BEGIN
        IF _id IS NULL THEN
            _id := ( SELECT id FROM (
                INSERT INTO ma_table (
                    id,
                    nom,
                    prenom,
                    datedenaissance,
                    sexe
                )
                VALUES (
                    DEFAULT,
                    _nom,
                    _prenom,
                    _datedenaissance,
                    _sexe
                )
                RETURNING id
                )
            );
        ELSE
            UPDATE ma_table
            SET
                nom  = _nom,
                prenom = _prenom,
                datedenaissance= _datedenaissance,
                sexe= _sexe
            WHERE id = _id
            ;
        END IF;
        -- poursuite du traitement des données
        RETURN 'mon texte';
    END;
    $$ LANGUAGE PLPGSQL;

  3. #3
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut
    la bonne syntaxe pour attribuer la valeur a mon '_id' semble être d'ajouter tout simplement "INTO _id" après la clause "RETURNING":

    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
    CREATE OR REPLACE FUNCTION ma_fonction(
        -- mes arguments commençant par '_'
    )
    RETURNS TEXT AS $$
    BEGIN
        IF _id IS NULL THEN
                INSERT INTO ma_table (
                    id,
                    nom,
                    prenom,
                    datedenaissance,
                    sexe
                )
                VALUES (
                    DEFAULT,
                    _nom,
                    _prenom,
                    _datedenaissance,
                    _sexe
                )
                RETURNING id
                INTO _id
                ;
        ELSE
            UPDATE ma_table
            SET
                nom  = _nom,
                prenom = _prenom,
                datedenaissance= _datedenaissance,
                sexe= _sexe
            WHERE id = _id
            ;
        END IF;
        -- poursuite du traitement des données
        RETURN 'mon texte';
    END;
    $$ LANGUAGE PLPGSQL;

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

Discussions similaires

  1. Erreur de syntaxe dans INSERT INTO
    Par nanar21 dans le forum VB.NET
    Réponses: 1
    Dernier message: 25/02/2010, 22h36
  2. erreur syntaxe sur insert into (date)
    Par jpclutier dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/05/2009, 10h02
  3. syntaxe commande INSERT INTO
    Par hottnikks_79 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2006, 13h52
  4. Erreur de syntaxe dans INSERT INTO VALUES
    Par Mariboo dans le forum Access
    Réponses: 4
    Dernier message: 25/05/2006, 18h57
  5. Incrémenter champ : insert into . select max(.) + 1 from .
    Par ludo.guy dans le forum Langage SQL
    Réponses: 10
    Dernier message: 25/11/2004, 14h39

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