Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
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 14/02/2006, 11h52   #1
Invité de passage
 
Inscription : octobre 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 16
Points : 1
Points : 1
Par défaut [DB2][procedure stockee] Comment sortir en erreur?

Bonjour

Je suis encore nouveau sur DB2, et j'aurais besoin de faire sortir une procédure stockée en erreur dans un cas précis.
J'ai trouvé l'instruction RAISE_ERROR mais je n'arrive pas à l'utiliser ^_^;

Voici une partie de mon code:

Code :
1
2
3
4
 
    IF v_res <> 0
    THEN RAISE_ERROR('99001', 'ERREUR: L établissement n existe pas dans le référentiel');
    END IF;
et le résultat qu'il m'affiche:

Code :
1
2
 
[IBM][CLI Driver][DB2/NT] SQL0104N Une marque inattendue "RAISE_ERROR" figure à la suite de "v_res <> 0     THEN".  Parmi  les marques attendues, ON  trouve : "RETURN".  LINE NUMBER=52.  SQLSTATE=42601
(la variable v_res a bien été déclarée et initialisée )

Est-ce que je m'y prends mal? Est-ce une instruction qui s'emploie ailleurs? Y a-t-il une autre solution pour sortir en erreur sur un IF comme celui-ci?

(Pour info j'ai besoin de sortir en erreur dans un cas précis pour pouvoir utiliser la condition d'echec dans Datawarehouse Center)

Merci d'avance
ze_patoche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 14h18   #2
Nouveau Membre du Club
 
Inscription : décembre 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 25
Points : 28
Points : 28
J'ai trouvé ça :
Code :
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
CREATE PROCEDURE raise ( IN rating INTEGER )
LANGUAGE SQL
BEGIN
DECLARE new_salary DECIMAL(9,2);
DECLARE service DECIMAL(8,0);
DECLARE v_empno CHAR(6) DEFAULT123456’;
SELECT salary, current_date - hiredate
INTO new_salary, service
FROM employee
WHERE empno = v_empno;
IF service < 600
THEN SIGNAL SQLSTATE ’II001’
SET MESSAGE_TEXT = ’Insufficient time IN service.’;
END IF;
IF rating = 1
THEN SET new_salary =
new_salary + (new_salary * .10);
ELSEIF rating = 2
THEN SET new_salary =
new_salary + (new_salary * .05);
END IF;
UPDATE employee
SET salary = new_salary
WHERE empno = v_empno;
END;
Regarde au niveau de SIGNAL et SET MESSAGE_TEXT.
Gwellañ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 15h07   #3
Invité de passage
 
Inscription : octobre 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 16
Points : 1
Points : 1
Ca marche nickel, merci pour ton aide!

ze_patoche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 15h26   #4
Nouveau Membre du Club
 
Inscription : décembre 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 25
Points : 28
Points : 28
Pas de quoi !
Gwellañ 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 17h51.


 
 
 
 
Partenaires

Hébergement Web