Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-04-2009 15:33:19

Fuggerbit
Membre
Date d'inscription: 17-12-2008
Messages: 54

[Résolu][1.7 Zend_Db] Récupérer des variables plSql

Bonjour voici un bout de code de mon contrôleur pour m'expliquer :

$sql = 'DECLARE nbCmd number(10); BEGIN nbCmd:=MAJ_CDE(1,2,3); END;';
$numCmd = $this->callProc($sql);

protected function callProc($sql) {

        $registry = Zend_Registry::getInstance();
        $config = $registry->get("config");
        $db = Zend_Db::factory($config->db);
       
        $res1 = 'vide';
       
        $db->beginTransaction();
        try {
            $statement = $db->prepare($sql);
            $statement->bindParam('nbCmd', $res1, SQLT_CHR, 32);
            $statement->execute();

            $db->commit();
        } catch (Exception $e) {
            $db->rollBack();
        }
        return $res1;
    }

La fonction s'exécute bien mais j'aimerais récupérer la valeur de retour (nbCmd) sachant que je ne peux pas modifier cette fonction oracle, ni en créer une nouvelle.
Merci d'avance wink

Dernière modification par Fuggerbit (23-04-2009 12:08:49)

Hors ligne

 

#2 22-04-2009 15:41:53

ziedb
Membre
Lieu: Tunis
Date d'inscription: 24-03-2008
Messages: 224

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

Tu fais   
$res1=$statement->fetchObject();

Hors ligne

 

#3 22-04-2009 15:42:31

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

hum... a priori, si tu n'as pas de return à la fin de ta procédure stockée, c'est grillé, tu ne peux pas récupérer la valeur (je suis un peu rouillé pour le PL/SQL d'Oracle, mais avec le PL/PGSQL de Postgres, ça marche comme ça en tout cas...).

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#4 22-04-2009 15:48:09

Fuggerbit
Membre
Date d'inscription: 17-12-2008
Messages: 54

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

ziedb a écrit:

Tu fais   
$res1=$statement->fetchObject();

Ca ne fonctionne pas...

Hors ligne

 

#5 22-04-2009 15:50:21

Fuggerbit
Membre
Date d'inscription: 17-12-2008
Messages: 54

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

philippe a écrit:

hum... a priori, si tu n'as pas de return à la fin de ta procédure stockée, c'est grillé, tu ne peux pas récupérer la valeur (je suis un peu rouillé pour le PL/SQL d'Oracle, mais avec le PL/PGSQL de Postgres, ça marche comme ça en tout cas...).

A+, Philippe

EN fait c'est une fonction, et elle retourne bien un résultat, seulement comme elle fait des opérations sur la base, je ne peux pas la lancer en faisant select MAJ_CDE(1,2,3) from dual apparement.

Hors ligne

 

#6 22-04-2009 16:15:34

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

Pour postgres, pour récupérer les données de mes procédures stockées, je fais :

Code:

        // calculate list of document to display
        $sql = "select * from my_proc_stock (
          :id,
          :viewDateStart,
          :viewDateEnd)";
        $params =  array(
            ":id"=>$id,
            ":viewDateStart"=>$start,
            ":viewDateEnd"=>$end
        );
        $res = $db->fetchAll($sql,$params);

Dans mon cas, la procédure stockée renvoie une liste de lignes d'un type défini ailleurs (my_proc_stock_resultType) :

Code:

CREATE OR REPLACE FUNCTION my_proc_stock (
  idParam integer,
  dateStartParam date,
  dateEndParam date
  )
RETURNS setof my_proc_stock_resultType AS $$
DECLARE
[....]

A+, Philippe

PS : c'est tjrs du postgres, je n'ai plus d'Oracle sous la main pour tester...


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#7 22-04-2009 16:24:23

Fuggerbit
Membre
Date d'inscription: 17-12-2008
Messages: 54

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

Merci mais le select * from la fonction ne marche pas hmm

Hors ligne

 

#8 22-04-2009 16:56:53

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

regarde ça
ça peut peut être t'aider

http://www.z-f.fr/forum/viewtopic.php?id=2423

A+JYT

Hors ligne

 

#9 22-04-2009 17:10:14

Fuggerbit
Membre
Date d'inscription: 17-12-2008
Messages: 54

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

sekaijin a écrit:

regarde ça
ça peut peut être t'aider

http://www.z-f.fr/forum/viewtopic.php?id=2423

A+JYT

Merci, ce post était intéréssant en effet mais ici c'est une fonction oracle en fait et non une procedure avec in out, donc elle fait un return.
Il y a des chances que la solution soit encore plus simple...
habituellement je fais des select fonc() from dual, et c'est bon mais uniquement pour les fonctions sans modif de base, là apparemment ça ne marche pas du fait que cette fonction modifie la table.

Hors ligne

 

#10 22-04-2009 17:35:53

Fuggerbit
Membre
Date d'inscription: 17-12-2008
Messages: 54

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

En fait pour être précis, je peux lancer la fonction dans un select et récupérer le résultat, mais le retour est toujours une erreur car je ne dois pas faire l'appel de cette manière.

Hors ligne

 

#11 23-04-2009 10:59:01

Fuggerbit
Membre
Date d'inscription: 17-12-2008
Messages: 54

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

Donc en gros ma question est, y'a t il un moyen d'exécuter le code suivant :

DECLARE nbCmd number(10); BEGIN nbCmd:=MAJ_CDE(1,2,3); END;

et de récupérer nbCmd

Hors ligne

 

#12 23-04-2009 11:47:51

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

Code:

$data = array(1,2,3);

$sql = 'DECLARE :nbCmd number(10); BEGIN nbCmd:=MAJ_CDE(?,?,?); END;';
$sql = $this->_db->quoteInto($sql,$data);

$res= null;

$statement = $this->_db->prepare($sql);
$statement->bindParam(':nbCmd ', $res, PDO::PARAM_INT);
$statement->execute();

j'utilise PDO si tu utilise un autre driver il te faut en tenir compte dans le bindParam

a+JYT

Dernière modification par sekaijin (23-04-2009 11:51:09)

Hors ligne

 

#13 23-04-2009 12:08:27

Fuggerbit
Membre
Date d'inscription: 17-12-2008
Messages: 54

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

Merci, j'ai trouvé, au début je pensais devoir faire :

$sql = 'DECLARE :nbCmd number(10); BEGIN :nbCmd:=MAJ_CDE(?,?,?); END;';
ou
$sql = 'DECLARE :nbCmd number(10); BEGIN nbCmd:=MAJ_CDE(?,?,?); END;';
mais en fait c'est :

$sql = 'DECLARE nbCmd number(10); BEGIN :nbCmd:=MAJ_CDE(?,?,?); END;';

Et là c'est bon wink

En tout cas merci sekaijin tu m'as bien aidé.

Hors ligne

 

#14 23-04-2009 12:21:40

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu][1.7 Zend_Db] Récupérer des variables plSql

de rien le binding n'est pas toujours évident

A+JYT

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages