Bonjour,
J'ai une procédure PL "extracation" sous oracle.
Elle contient deux paramètres vc_db1 := 'MAGASIN_PARIS' ET
vc_db2 := 'CENTRE_PARIS'
Je souhaite l’exécuter en lui passant les paramètres dans l’exécution
Merci
Code:EXEC extracation @...
Version imprimable
Bonjour,
J'ai une procédure PL "extracation" sous oracle.
Elle contient deux paramètres vc_db1 := 'MAGASIN_PARIS' ET
vc_db2 := 'CENTRE_PARIS'
Je souhaite l’exécuter en lui passant les paramètres dans l’exécution
Merci
Code:EXEC extracation @...
Deux variantes :
Appel avec position des paramètres :
Appel avec nom des paramètres :Code:
1
2 EXEC extraction('MAGASIN_PARIS', 'CENTRE_PARIS');
Code:
1
2 EXEC extraction(vc_db2 => 'CENTRE_PARIS', vc_db1 => 'MAGASIN_PARIS');
Merci
En fait, ca ne marche pas !
dans ma procédure j'ai deux variable paramètres :
Code:
1
2
3 vc_db2 := 'CENTRE_PARIS'; vc_db1 := 'MAGASIN_PARIS';
pour exécuter la proc sans mettre les valeurs en paramètre en dur dans PL :
Je dois enlever les paramètres en dur dans PL ? sous quel format ?
avant de faire :
Code:
1
2 EXEC extraction(vc_db2 => 'CENTRE_PARIS', vc_db1 => 'MAGASIN_PARIS')
Merci de votre aide
Votre question n'est pas vraiment clair; votre histoire de paramètre en dur est nébuleuse.
A quel moment voulez vous renseigner les valeurs de ces paramètres ?
Poster le code de la procédure, merci.
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
28
29
30
31
32
33
34
35
36 create or replace PROCEDURE EXTRACTION IS LN$Cpt PLS_INTEGER ; vc_db1 varchar2(100); vc_db2 varchar2(100); BEGIN vc_db1 := 'PARIS'; vc_db2 := 'BORDEAUX'; EXECUTE IMMEDIATE ' INSERT INTO table1 ( ...) ( Select ... FROM vuemag@'||vc_db1||')' ; EXECUTE IMMEDIATE ' INSERT INTO table2 ( ...) ( Select ... FROM vuemag@'||vc_db2||')' ; END,
voici mon code
Le but est de na pas mettre les deux variables dans PL (vc_db1/ vc_db2)
Je souhaiterai passer les valeurs lors de l'execution
Merci beaucoup
Il suffit donc de virer les deux variables et les mettre en paramètre, comme dit plus haut :
Accessoirement, il y a une bonne raison ici pour utiliser du SQL dynamique dans la procédure ?Code:
1
2
3
4
5
6
7
8
9 CREATE OR REPLACE PROCEDURE EXTRACTION ( vc_db1 varchar2, vc_db2 varchar2 ) IS ....
Code:
1
2
3
4
5
6
7
8
9 CREATE OR REPLACE PROCEDURE EXTRACTION ( vc_db1 varchar2, vc_db2 varchar2 ) IS ....
Accessoirement, il y a une bonne raison ici pour utiliser du SQL dynamique dans la procédure
c'est ce que j'ai fait mais j'ai une erreur !
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
28
29
30
31 CREATE OR REPLACE PROCEDURE EXTRACTION IS LN$Cpt PLS_INTEGER ; vc_db1 varchar2(100); vc_db2 varchar2(100); BEGIN EXECUTE IMMEDIATE ' INSERT INTO table1 ( ...) ( Select ... FROM vuemag@'||vc_db1||')' ; EXECUTE IMMEDIATE ' INSERT INTO table2 ( ...) ( Select ... FROM vuemag@'||vc_db2||')' ; END,
Code:
1
2 EXEC extraction(vc_db2 => 'BORDEAUX', vc_db1 => 'PARIS');
J'ai l'erreur
RA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to EXTRACTION
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Comme on a pas la moindre idée de ce qu'est ALIM2 ....
Par ailleurs, je ne vois pas le rapoprt entre la modif de code que j'ai suggéré et celui que tu postes; encore une fois, réponse nébuleuse.
De plus, tu n'as pas répondu à la question concernant l'usage du SQL dynamique ici.
pour le SQL dynamique
J'ai posté ici une partie de la ps
En effet, j 'ai une proc stockée qui interroge des vues dans d'autres shémas à travers des db link.
Il y a un paramètre dans le script qui remplace la valeur en dur que j'ai positionné dans mes requêtes sql au départ.
Merci de m'avoir aidé