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 />';
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;
/
Les variables OUT sont vides. Comment dois-je faire?

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