Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 11/01/2008, 17h57   #1
Membre régulier
 
Inscription : mai 2006
Messages : 146
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mai 2006
Messages : 146
Points : 88
Points : 88
Par défaut Procedure : déclaration et affectation de variable

[FONT=Times New Roman]Bonjour,[/FONT]

[FONT=Times New Roman]J'ignore si certains travaillent encore à cette heure au bureau, moi j'y suis et je me demande comment modifier cette procédure PL/SQL pour qu'elle marche :[/FONT]

[FONT=Times New Roman]CREATE OR REPLACE PROCEDURE TABLE_INSERT([/FONT]
[FONT=Times New Roman] VersionLbl IN VARCHAR2(30), CommentLbl IN VARCHAR2(200)) IS[/FONT]
[FONT=Times New Roman]BEGIN[/FONT]
[FONT=Times New Roman] DECLARE newId NUMBER;[/FONT]
[FONT=Times New Roman] newId := SELECT MAX(id) FROM REQM_TOOL_VERSION;[/FONT]
[FONT=Times New Roman] INSERT INTO TABLE ( ID, VERSION_LBL, COMMENT_LBL ) VALUES ( [/FONT]
[FONT=Times New Roman]newId, VersionLbl, CommentLbl);[/FONT]
[FONT=Times New Roman] COMMIT;[/FONT]
[FONT=Times New Roman]END;[/FONT]
[FONT=Times New Roman]/[/FONT]

Et à cause de documentations contradictoires, je vous demande de me le confirmer : un appel à la procédure peut bien se faire par la commande EXECUTE TABLE_INSERT('5.0', 'Voilà pourquoi') ?

Merci ; Sam
__________________
~~ Sine Metu ~~
samworld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2008, 18h23   #2
Membre Expert
 
Homme
Expert Datawarehouses + BO (sur BDD Oracle et SQL Server)
Inscription : mars 2003
Messages : 645
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 41
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Expert Datawarehouses + BO (sur BDD Oracle et SQL Server)

Informations forums :
Inscription : mars 2003
Messages : 645
Points : 1 165
Points : 1 165
Merci d'utiliser la balide code, donc après avoir mis cette balise on a:
Code :
1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE PROCEDURE TABLE_INSERT(
 VersionLbl IN VARCHAR2(30), CommentLbl IN VARCHAR2(200)) IS
BEGIN
 DECLARE newId NUMBER;
 newId := SELECT MAX(id) FROM REQM_TOOL_VERSION;
 INSERT INTO TABLE ( ID, VERSION_LBL, COMMENT_LBL ) 
VALUES ( 
newId, VersionLbl, CommentLbl);
 COMMIT;
END;
cette ligne ne peut pas fonctionner en PL/SQL.
Code :
 newId := SELECT MAX(id) FROM REQM_TOOL_VERSION;
ça s'écrit:
Code :
 SELECT MAX(id) INTO  newId FROM REQM_TOOL_VERSION;
DECLARE n'est pas à utiliser dans une procédure.

Un commit dans un procédure n'est pas recommandé, en tout cas pas de cette façon il faut une gestion d'exception, et un ROLLBACK en cas de souci.

Donc ça donnerait, si je n'ai pas laissé passer d'autres erreurs:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE OR REPLACE PROCEDURE TABLE_INSERT(
 VersionLbl IN VARCHAR2(30), CommentLbl IN VARCHAR2(200)) IS
    newId NUMBER;
BEGIN
    SELECT MAX(id) INTO newId  FROM REQM_TOOL_VERSION; -- modifié le 14/1/07 copier,coller intempestif
    INSERT INTO TABLE ( ID, VERSION_LBL, COMMENT_LBL ) 
    VALUES 
    (newId, VersionLbl, CommentLbl);
    COMMIT;
EXCEPTION  
    WHEN OTHERS THEN
        raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
        ROLLBACK;
END;
/
edit:
Citation:
Envoyé par samworld Voir le message
un appel à la procédure peut bien se faire par la commande EXECUTE TABLE_INSERT('5.0', 'Voilà pourquoi') ?
oui, une fois que le reste sera corrigé. Si tu utilises TOAD il te donne l'impression que ça "compile" mais souvent il ne detectes pas d'erreur à moins d'utiliser l'onglet de création de procédure idoine.

edit 14/1/07:
SELECT MAX(id) INTO newId FROM REQM_TOOL_VERSION; -- modifié le 14/1/07 copier,coller intempestif , newId:=SELECT MAX(id) FROM était faux
phili_b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2008, 18h27   #3
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
Il y a encore du monde au bureau, il est juste midi vingt!! Doucement sur l'ethnocentrisme !

Bon, déjà, affiche un formattage lisible de ton message, je ne ferais pas l'effort une autre fois.
Et utilise aussi la balise [ code ] [ /code ] pour le code...

J'ai jeté un oeil sur ton code et visiblement tu ne maitrises pas le PL/SQL alors je te renvois sur http://sheikyerbouti.developpez.com/pl_sql/
Regarde les messages de compilation, ils sont tout de même assez explicite...
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2008, 22h15   #4
Membre du Club
 
Inscription : janvier 2008
Messages : 50
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 50
Points : 47
Points : 47
Attention à la déclaration des types de tes paramètres :
Code :
( param1 IN VARCHAR2, param2 IN VARCHAR2 )
(et oui on ne spécifie pas la taille).

Que penses-tu de :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE OR REPLACE PROCEDURE TABLE_INSERT(
 VersionLbl IN VARCHAR2, CommentLbl IN VARCHAR2) IS
BEGIN
    INSERT INTO TABLE ( ID, VERSION_LBL, COMMENT_LBL ) 
    VALUES 
    ((SELECT MAX(id) FROM REQM_TOOL_VERSION), VersionLbl, CommentLbl);
    COMMIT;
EXCEPTION  
    WHEN OTHERS THEN
        raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
        ROLLBACK;
END;
/
wondersonic 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 11h53.


 
 
 
 
Partenaires

Hébergement Web