Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/05/2005, 09h01   #1
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
Par défaut 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
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 14h49   #2
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
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.
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2005, 09h17   #3
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
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.
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2005, 09h51   #4
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
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 :
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 :
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;
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2005, 10h37   #5
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
Merci beaucoup pour la gestion des erreurs.
Tant pis pour la fonction storage.

champijulie.
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h58.


 
 
 
 
Partenaires

Hébergement Web