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 03/01/2008, 16h43   #1
Rédacteur

 
Avatar de Louis-Guillaume Morand
 
Homme Louis-Guillaume MORAND
Consultant @ Microsoft
Inscription : mars 2003
Messages : 10 713
Détails du profil
Informations personnelles :
Nom : Homme Louis-Guillaume MORAND
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant @ Microsoft
Secteur : Conseil

Informations forums :
Inscription : mars 2003
Messages : 10 713
Points : 15 946
Points : 15 946
Par défaut Declare dans une SP

J'ai cette SP toute simple mais il ne veut pas de mon declare. j'ai pourtant besoin de cette variable pk_f (j'ai simplifié la SP, il manque du code qui justement, utilise cette variable)

Quelqu'un saurait comment dois-je mettre ce simple petit declare pour avoir une variable de type number que je puisse modifier. je n'ai pas besoin de la retourner au final (out)

merci d'avance

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 OR REPLACE PROCEDURE sp_createalertfile (
   p_id               OUT      NUMBER,
   p_usr              IN       VARCHAR2 DEFAULT '',
   p_global_comment   IN       VARCHAR2 DEFAULT '',
   p_file             IN       VARCHAR2
)
AS
DECLARE pk_file number;
BEGIN
   SELECT pk_file
     INTO pk_f
     FROM t_files
    WHERE file_name = p_file;
 
   INSERT INTO t_alerts
               (pk_alert, pk_file, global_comment, created_on, created_by
               )
        VALUES (sq_alert.NEXTVAL, pk_f, p_global_comment, SYSDATE, p_usr
               );
 
   SELECT sq_alert.CURRVAL
     INTO pk_id
     FROM DUAL;
END sp_createalertfile;
/
Louis-Guillaume Morand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 16h49   #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
Tu confonds entre SQL server et Oracle. On utilise IS sous Oracle pour débuter proprement dit la procédure. De plus, contrairement à du PL/SQL seul sans procédure, le mot clé DECLARE n'est pas utilisé. La déclaration de variable se fait entre le IS et le BEGIN.
phili_b est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 17h19   #3
Rédacteur

 
Avatar de Louis-Guillaume Morand
 
Homme Louis-Guillaume MORAND
Consultant @ Microsoft
Inscription : mars 2003
Messages : 10 713
Détails du profil
Informations personnelles :
Nom : Homme Louis-Guillaume MORAND
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant @ Microsoft
Secteur : Conseil

Informations forums :
Inscription : mars 2003
Messages : 10 713
Points : 15 946
Points : 15 946
je sais que AS vient de MSSQL mais pourtant, sous TOAD, ca compile et je crois meme que ca marche :/

par contre (et donc avec le "IS")

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 OR REPLACE PROCEDURE sp_createalertfile (
   p_id               OUT      NUMBER,
   p_usr              IN       VARCHAR2 DEFAULT '',
   p_global_comment   IN       VARCHAR2 DEFAULT '',
   p_file             IN       VARCHAR2
)
IS
DECLARE pk_file number;
BEGIN
   SELECT pk_file
     INTO pk_f
     FROM t_files
    WHERE file_name = p_file;
 
   INSERT INTO t_alerts
               (pk_alert, pk_file, global_comment, created_on, created_by
               )
        VALUES (sq_alert.NEXTVAL, pk_f, p_global_comment, SYSDATE, p_usr
               );
 
   SELECT sq_alert.CURRVAL
     INTO pk_id
     FROM DUAL;
END sp_createalertfile;
/
ca marche pas plus pour moi exactement la même erreur qu'avec le AS

et si j'enleve le mot "DECLARE", ca plante plus loin en me disant "pk_f must be declared"
__________________
moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom
Louis-Guillaume Morand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 17h24   #4
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
Je ne pense pas me tromper car je vois que tu déclares pk_file mais tu cherches à remplir pk_f qui n'est déclaré nul part.
phili_b est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 17h29   #5
Rédacteur

 
Avatar de Louis-Guillaume Morand
 
Homme Louis-Guillaume MORAND
Consultant @ Microsoft
Inscription : mars 2003
Messages : 10 713
Détails du profil
Informations personnelles :
Nom : Homme Louis-Guillaume MORAND
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant @ Microsoft
Secteur : Conseil

Informations forums :
Inscription : mars 2003
Messages : 10 713
Points : 15 946
Points : 15 946
Citation:
Envoyé par phili_b Voir le message
Je ne pense pas me tromper car je vois que tu déclares pk_file mais tu cherches à remplir pk_f qui n'est déclaré nul part.


effectivement. c'était un mixte de coquille, plus mot clé DECLARE inutile(voire bloquant) et le mot AS

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 OR REPLACE PROCEDURE sp_createalertfile (
   p_id               OUT      NUMBER,
   p_usr              IN       VARCHAR2 DEFAULT '',
   p_global_comment   IN       VARCHAR2 DEFAULT '',
   p_file             IN       VARCHAR2
)
IS
  pk_f number;
BEGIN
   SELECT pk_file
     INTO pk_f
     FROM t_files
    WHERE file_name = p_file;
 
   INSERT INTO t_alerts
               (pk_alert, pk_file, global_comment, created_on, created_by
               )
        VALUES (sq_alert.NEXTVAL, pk_f, p_global_comment, SYSDATE, p_usr
               );
 
   SELECT sq_alert.CURRVAL
     INTO p_id
     FROM DUAL;
END sp_createalertfile;
/

merci
Louis-Guillaume Morand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 21h19   #6
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Je crois comprendre que tu considère l'utilisatio du mot AS comme erronée ...
En fait AS ou IS sont utilisables dans ce cas sans aucune différence
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 22h14   #7
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
(ha! j'avais jamais fait gaffe qu'on pouvait mettre indifféremment AS et IS )
phili_b est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 09h04   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
http://sheikyerbouti.developpez.com/...age=Chap4#L4.1
orafrance 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 13h55.


 
 
 
 
Partenaires

Hébergement Web