Salut,
je voudrais executer une requete select a travers une procedure stockée ds oracle .
Mais je me butte a plein de messages d´erreurs.
Voici ma procedure ds oracle:
- v_project_id est mon parametre qui doit etre passé par le programme Perl à la procedure, v_project_c_id et v_project_id_find sont les valeurs de retour au programme Perl...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
37
38
39
40
41
42
43
44
45
46
47
48 PROCEDURE get_projects_and_sub_projects ( v_project_id IN INTEGER, v_project_c_id OUT INTEGER, v_project_id_find OUT VARCHAR2 ) IS BEGIN SELECT c_id, proj_id INTO v_project_c_id, v_project_id_find FROM t_projet WHERE t_projet .ksa_pro_art_kbz = 'KU' AND t_projet.proj_id LIKE v_project_id || '%'; EXCEPTION WHEN NO_DATA_FOUND THEN v_project_c_id := NULL; v_project_id_find := NULL; WHEN OTHERS THEN kmessages.error (NULL, 'get_projects_and_sub_projects', 'Project-Name: ' || v_project_id, 'Errornumber: ' || SQLCODE || ' Error: ' || SQLERRM, TRUE, TRUE ); raise_application_error (-20001, 'Error ' || SQLCODE || ' get_projects_and_sub_projects: ' || SQLERRM, TRUE ); END get_projects_and_sub_projects;
L´appel dans Perl se fait de la maniere suivante:
La procedure doit me retourner plusieurs valeurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 sub get_projects_unterprojects_name($$){ my ($db_handle, $proj_name_id) = @_; #$db_handle est l´appel de la connexion a la BD Oracle, $proj_name_id la variable passée en parametre my $db_proj_c_id; my $db_proj_name; $proj_name_id = encode("iso-8859-1", $proj_name_id); eval{ my $csr = $db_handle->prepare(q{ BEGIN :db_proj_c_id, :db_proj_name = pro_doc_ber.get_projects_and_sub_projects(:proj_name_id, :v_project_c_id, :v_project_id_find); END; }); # Parametre de recherche $csr->bind_param(":proj_name_id", $proj_name_id); # valeur retour $csr->bind_param_inout(":db_proj_c_id", \$db_proj_c_id, 11); $csr->bind_param_inout(":db_proj_name", \$db_proj_name, 20); $csr->execute(); };
Comment se passe l´appele et la recuperation des resultats? Comment est ce que je dois declarer les variables ds la procedure stockée ds oracle? et l´appel? Dois je appeler la procedure avec seulement la variable IN? Avez vous un example?
merci
Partager