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:

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;
- 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...

L´appel dans Perl se fait de la maniere suivante:

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(); };
La procedure doit me retourner plusieurs valeurs.
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