Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 31/08/2011, 11h45   #1
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
Par défaut Peut-on utiliser des procédures non stockées dans un bloc PL/SQL?

Bonjour,

Je vous explique le contexte. J'essaie de faire un rattrapage de données en pl/sql. J'ai un script shell qui exécute un fichier .sql, ce fichier sql est un bloc pl/sql. Dans ce bloc j'ai pas mal de code qui revient alors je l'ai factorisé en procédure.

j'ai donc quelque chose de la forme :

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
procedure name1() IS
declare
       ...
begin
       ...
end name1;
 
procedure name2() IS
declare
       ...
begin
       ...
end name2;
 
procedure name3() IS
begin
       ...
end name3;
 
begin
       name1();
       name2();
       name3();
end;
Lorsque j'execute mon shell il se bloque sur l'exécution du .sql, sous toad lorsque je pose le contenu de mon .sql je n'ai aucun message d'erreur mais le traitement ne se fait pas. Je ne peux donc même pas tracer mes variables, du coup j'en suis à me demander si ce ne serait pas mes appels des procédures qui posent problème ou leur utilisation.
Kihmé Xs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 13h07   #2
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
Vu que tes procédures n'ont pas de paramètres, vire les () lors de leurs appels et de leurs définitions.

Pour moi, ça devrait tourner sans les parenthèses, j'ai un script qui fait la même chose qui et marche très bien.
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/08/2011, 13h28   #3
Membre éprouvé
 
Avatar de xdescamp
 
Homme Xavier Descamps
Inscription : octobre 2008
Messages : 297
Détails du profil
Informations personnelles :
Nom : Homme Xavier Descamps
Âge : 36
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2008
Messages : 297
Points : 422
Points : 422
Envoyer un message via Skype™ à xdescamp
Il manque un "/" à la fin de chacun des blocs. Si tu exécutes ton script sous SQL*Plus, ça ne peut pas fonctionner.
Ton code doit plutôt ressembler à ç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
26
27
procedure name1() IS
declare
       ...
begin
       ...
end name1;
/
 
procedure name2() IS
declare
       ...
begin
       ...
end name2;
/
procedure name3() IS
begin
       ...
end name3;
/
 
begin
       name1();
       name2();
       name3();
end;
/
xdescamp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/08/2011, 14h10   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Il faut placer les procédures dans la zone de déclaration du programme prinicipal :
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
26
27
SQL> SET serverout ON
SQL> declare
  2    procedure name1 IS
  3    begin
  4      dbms_output.put_line('Proc name1');
  5    end;
  6    procedure name2 IS
  7    begin
  8      dbms_output.put_line('Proc name2');
  9    end;
 10    procedure name3 IS
 11    begin
 12      dbms_output.put_line('Proc name3');
 13    end;
 14  begin
 15    name1;
 16    name2;
 17    name3;
 18  end;
 19  /
Proc name1
Proc name2
Proc name3
 
PL/SQL procedure successfully completed.
 
SQL>
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/09/2011, 16h06   #5
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
merci à tous,

C'était effectivement une succession de plein de petite erreurs de la sorte qui me gênait.
Kihmé Xs 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 21h37.


 
 
 
 
Partenaires

Hébergement Web