Bonjour,
Je voudrais exécuter une prodécure stockée sous oracle avec PDO, mais je n'y arrive pas.
Voici ce que je fais:
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 $db_dsn = 'oci:dbname=XXXXX'; $db_user = 'YYYYY'; $db_password = 'ZZZZZ'; try { // Nouvelle connexion PDO $pdo = new PDO($db_dsn, $db_user, $db_password); } catch (Exception $e) { // Affichage du message d'erreur // et arrêt du script die($e->getMessage() . ' (' . $e->getCode() . ')'); } // Variables $country = '033'; $year = '0000'; $week = '00'; // Liste des paramètres préparés $list_parameters = array($country, &$year, &$week); // Requête à exécuter $query = 'BEGIN P_ADHERENTS_SEMAINES(?, ?, ?); '; $query .= 'END;'; // Préparation de la requête $stmt = $pdo->prepare($query); // Exécution de la requête $stmt->execute($list_parameters); // Récupération des résultats dans un tableau d'objets $result = $stmt->fetchAll(PDO::FETCH_OBJ); // Fermeture du curseur $stmt->closeCursor(); // Affichage du résultat echo 'year: ' . $year . '<br />'; echo 'week: ' . $week . '<br />';Les variables OUT sont vides. Comment dois-je faire?
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
49
50 CREATE OR REPLACE PROCEDURE DWEVA.P_ADHERENTS_SEMAINES ( s_pays IN varchar2, l_annee OUT number , l_semaine OUT number ) IS -------------------------------------------------------------------------------- -- COMMENTAIRE DEBUT Adhérents : Récupération de la semaine en cours FIN -------------------------------------------------------------------------------- -- Variables locales. BEGIN -- Début de procédure dbms_output.enable(1000000); dbms_output.put_line('DEBUT'); -- Affichage des paramètres dbms_output.put_line('s_pays ='||s_pays); -- Récupération de la semaine. BEGIN -- Initialisation. l_annee := 0; l_semaine := 0; -- Sélection. SELECT id_ann, id_sem_cin INTO l_annee, l_semaine FROM DIM_CALENDRIER WHERE cod_pay = s_pays AND dt_dat_jou = to_char(sysdate,'DD/MM/YYYY'); -- Exception. EXCEPTION WHEN no_data_found THEN l_annee := 0; l_semaine := 0; END; -- Fin de procédure dbms_output.put_line('FIN'); END P_ADHERENTS_SEMAINES; /
J'ai essayé également avec un resultset en retour, mais je n'ai pas réussi non plus.
Quelqu'un pourrait m'expliquer comment faire? (les 2 solutions)
Merci d'avance
Partager