[Oracle] Exécution d'une procédure stockée
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:
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:
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