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 :

Problème de procédure stockée PL/pgsql


Sujet :

Requêtes PostgreSQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Problème de procédure stockée PL/pgsql
    Bonjour,

    J'ai une migration de procédures stockées depuis une base de données ORACLE à une base de donnée Postgres. Malheureusement je rencontre quelques problème avec Postgres, une BDD avec la quelle je ne suis pas très alaise.

    Voici l'une de mes PS :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    CREATE OR REPLACE FUNCTION dinsertpalletdesc (PLSqlszURN in text, PLSqlszSSCC in text, PLSqlszTagID in text, PLSqlszNumPalette in text, PLSqlszPlateforme in text, PLSqlszEntrepot in text,
    PLSqltDateHeureIlotage in text, PLSqleTypePalette in text, PLSqlePFEPFS in text, PLSqlCodePDLClient in text,
    PLSqlszCodeArticle in text, PLSqlszLibelleArticle in text, PLSqliNbColis in bigint, PLSqleAlcool in text, PLSqlszNumCommande in text,
    PLSqlszNumPaletteFille in text, NewPallet in bigint)
     RETURNS VOID AS $body$
    DECLARE
     
      BEGIN
        if NewPallet=1 then
            BEGIN
                insert into dtag (szURN, szSSCC, szTagID, szNumPalette, szPlateforme, szEntrepot, tDateHeureIlotage, eTypePalette, ePFEPFS, CodePDLClient, itypetag)
                    values (PLSqlszURN, PLSqlszSSCC, PLSqlszTagID, PLSqlszNumPalette, PLSqlszPlateforme, PLSqlszEntrepot,
                    CASE
                        WHEN
                            substr(PLSqltDateHeureIlotage, 1, 19) LIKE '0002-11-30T00:00:00' THEN null
                    ELSE
                        to_timestamp(substr(replace(PLSqltDateHeureIlotage, 'T', ' '), 1, 19), 'RRRR-MM-DD HH24:MI:SS')
                    END,
                    PLSqleTypePalette,
                    CASE
                        WHEN PLSqlePFEPFS = 'E' THEN 'PFE'
                        WHEN PLSqlePFEPFS = 'S' THEN 'PFS'
                        WHEN PLSqlePFEPFS = 'B' THEN 'PFB'
                    ELSE
                        null
                    END,
                    PLSqlCodePDLClient, 0);
            EXCEPTION
                WHEN
                    unique_violation
                THEN
     
                        update dtag set szNumPalette=PLSqlszNumPalette, szPlateforme=PLSqlszPlateforme, szEntrepot=PLSqlszEntrepot,
                        tDateHeureIlotage=
                            CASE
                                WHEN substr(PLSqltDateHeureIlotage, 1, 19) LIKE '0002-11-30T00:00:00' THEN null
                            ELSE
                                to_timestamp(substr(replace(PLSqltDateHeureIlotage, 'T', ' '), 1, 19), 'RRRR-MM-DD HH24:MI:SS')
                            END,
                        eTypePalette=PLSqleTypePalette, ePFEPFS=
                        CASE
                            WHEN PLSqlePFEPFS = 'E' THEN 'PFE'
                            WHEN PLSqlePFEPFS = 'S' THEN 'PFS'
                            WHEN PLSqlePFEPFS = 'B' THEN 'PFB'
                        ELSE
                            null
                        END,
                        CodePDLClient=PLSqlCodePDLClient where szURN=PLSqlszURN;
     
            END;
            delete from dpalette where szURN=PLSqlszURN;
      END IF;
      insert into DPALETTE (szURN, SZCODEARTICLE, SZLIBELLEARTICLE, INBCOLIS, EALCOOL, SZNUMCOMMANDE, SZNUMPALETTEFILLE)
        values (PLSqlszURN, PLSqlszCodeArticle, PLSqlszLibelleArticle, PLSqliNbColis, (CASE WHEN PLSqleAlcool='O' THEN 'TRUE' WHEN PLSqleAlcool='N' THEN 'FALSE' ELSE Null END), PLSqlszNumCommande, PLSqlszNumPaletteFille);
      COMMIT;
    END;
    $body$
    LANGUAGE PLPGSQL;
    Voici mon Erreur (que je n'arrive pas réellement à comprendre) :

    org.postgresql.util.PSQLException: ERREUR: ne peut pas utiliser les instructions BEGIN/END de transactions dans PL/pgsql
    Indice : Utiliser un bloc BEGIN dans une clause EXCEPTION à la place.


    Auriez-vous une idée du problème ?

    Merci à vous.

  2. #2
    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
    Il y a un COMMIT dans la fonction, et il faut l'enlever. Le contrôle de transaction est interdit dans les fonctions en PostgreSQL.

    Le message d'erreur parle de END, c'est parce qu'en SQL BEGIN/END est synonyme de BEGIN/COMMIT.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup,
    C'est exactement ça, maintenant cela fonctionne parfaitement

    Encore merci, je marque ça comme résolu !

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

Discussions similaires

  1. [SQLServer 2000] Problème accès procédure stockée
    Par LE NEINDRE dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/08/2007, 14h21
  2. Problème de procédure stockée fausse
    Par le-maraudeur dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/07/2007, 13h21
  3. [SQLSERVER]Problème de procédure stockée
    Par mikedavem dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/12/2006, 00h17
  4. Réponses: 1
    Dernier message: 17/07/2006, 17h08
  5. Problème de procédure stockée
    Par Sorcier157 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 17/03/2005, 17h57

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