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 :

Problème de migration


Sujet :

PostgreSQL

  1. #1
    Membre habitué
    Problème de migration
    J'effectue une migration de BD sous Oracle vers Postgre et j'ai rencontré deux soucis:
    1/ Comment transformer la gestion des erreurs avec l'option OTHER sous Oracle pour avoir le même résultat sous Postgre?
    2/ Savez-vous si les commandes storage et post existe sous Postgre? Si non, par quoi les remplacer?

    Merci d'avance de me répondre.
    Champijulie

  2. #2
    Membre émérite
    Peux tu nous donner plus de precision, genre un exemple.
    Je suppose que pour STORAGE tu parle des tablespaces, mais il me faudrait plus de précisions.
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  3. #3
    Membre habitué
    Kikou,
    je m'explique:
    1// Je ne connais pas trop les fonctions sous Oracle et je ne trouve pas d'informations sur la fonction storage. Voici un exemple de déclaration de table sous Oracle utilisant cette fonction:
    -- Drop table ADSUtilisateur;
    Create table ADSUtilisateur
    (
    CodeADS varchar(2) not null,
    ProfilUtilisateur number(8) not null,
    DroitEcriture number(1) ,
    DroitLecture number(1)
    )
    storage (
    initial 100k
    next 10K
    pctincrease 0
    );
    Et j'aurais voulu savoir si il y avait un moyen d'avoir le même résultat sous Postgre car apparemment, elle n'existe pas.
    2// Dans les fonctions sous Oracle, il y a une gestion des erreurs dans le cas où ce sont des erreurs autres et on utilise other. Voici un exemple:
    begin
    Select id_erreur||':'||libelle
    Into libelle
    From erreur
    Where id_erreur = p_num;

    return(libelle);

    exception when others then libelle := p_num||':ERREUR INDEFINIE';
    return(libelle);
    end lire_erreur;
    Cela permet de gérer tous les cas d'erreur autres que le fait de ne pas trouver le résultat à la requête précédente. Le reste de la fonction à été transformé en PL/pgSQL mais dans des cas plus complexes que celui ci comme une exeption when Other apres une exeption when No_data_found, je ne sais pas comment transformer la fonction pour gérer les deux cas.

    J'espère que j'ai été suffisament précise mais si tu as besoin de plus de précision, n'hésite pas.
    champijulie.

  4. #4
    Membre émérite
    Bonjour,

    Pour le storage, en fait c'est une fonctionnalité qui n'existe pas (pour l'instant) dans pg, elle permet de definir la maniere dont le tablespace de l'user est initialisé et comment il evolura.

    Pour l'exception, il existe bien le test sur OTHERS, d'ailleurs tu l'a correctement ecrite dans ta procedure (et oui PG ressemble bcp a Oracle!).
    Pour gerer les differents cas :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    BEGIN
     ..du code ici..
    EXCEPTION
        WHEN NO_DATA OR DATA_EXCEPTION THEN   -- par exemple
            INSERT INTO ......;
        WHEN OTHERS THEN
              UPDATE .......;
    END;


    dans ton cas :
    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
     
    Create or replace function lire_erreur (integer) returns varchar AS
    $BODY$
    DECLARE
     p_num ALIAS FOR $1;
     libelle varchar(160);
     num integer;
    BEGIN
      --......ici du code non protégé
     BEGIN
      SELECT INTO num count(*) FROM erreur WHERE id_erreur=p_num;
     EXCEPTION
       WHEN SUCCESSFUL_COMPLETION THEN
        SELECT INTO libelle id_erreur||':'||libelle From erreur Where id_erreur = p_num;
       WHEN OTHERS THEN
          libelle := p_num||':ERREUR INDEFINIE';
     END;
     return libelle;
    END;
    $BODY$
    LANGUAGE 'plpgsql' VOLATILE;
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  5. #5
    Membre habitué
    Merci beaucoup pour la gestion des erreurs.
    Tant pis pour la fonction storage.

    champijulie.