Vous n'êtes pas identifié(e).

#1 09/02/2010 08:14:35

stomerfull
Membre

procédure stockée avec postgres

bonjour

je voudrais mettre en place une procédure stockée dans la base de donnée avec postgres, en tant que débutant j'ai besoin de votre conseil pour avancer

voici la méthode à modifier pour prendre en compte la procédure stockée :

/**
     * Method for returning the last insert id
     *
     */
    public function getLastInsertedId($sqlQuery, $pdoObject) {
        // Checks if query is an insert and gets table name
        if( preg_match("/^INSERT[\t\n ]+INTO[\t\n ]+([a-z0-9\_\-]+)/is", $sqlQuery, $tablename) ) {
            // Gets this table's last sequence value
            $query = "SELECT currval('" . $tablename[1] . "_id_seq') AS last_value";

            $temp_q_id = $this->prepared($query);
            $temp_q_id->execute();

            if($temp_q_id) {
                $temp_result = $temp_q_id->fetch(PDO::FETCH_ASSOC);
                return ( $temp_result ) ? $temp_result['last_value'] : false;
            }
        }
        return false;
    }

voici l'instruction qu'on ma donné c'est à dire que la personne a déjà mis  en place la procédure stockée dans la serveur en ligne mais moi je voudrais le mettre en place de mon coté en local pour pouvoir faire un test avec la mis en ligne

I added a stored procedure to the db
you can invoke it like this
select get_sequence('public', 'languages', 'id');
and it will return
evostream_logs=> select get_sequence('public', 'languages', 'id');
   get_sequence   
------------------
 languages_id_seq
(1 row)
this is the way of getting the sequence_id
the regexp method ain't going to fly!
moreover, to get the last insert id you can do:
select currval('languages_id_seq');

ceci est exemple de procédure stockée dans une table language avec les champs id et name pour retourner le last insert id
le but est  de ne pas utiliser le regex dans la méthode

merci pour votre aide

Dernière modification par stomerfull (09/02/2010 08:16:53)

Hors ligne

#2 09/02/2010 09:21:07

Marc Cousin
Membre

Re : procédure stockée avec postgres

Ce que vous montrez n'est pas le code d'une procédure stockée, mais la documentation d'une procédure stockée.


Marc.

Hors ligne

#3 09/02/2010 09:27:50

stomerfull
Membre

Re : procédure stockée avec postgres

Oui bien sur c'est la documentation qu'on ma fournie mais pas le code

et c'est pour ça que j'ai besoin de l'aide ici pour m'aider à ecrire le code de la procédure qui retourne l'id de la séquence


si vous avez une piste ou url je suis preneur
merci

Hors ligne

#4 09/02/2010 09:58:50

gleu
Administrateur

Re : procédure stockée avec postgres

Il n'y a pas besoin d'écrire de procédure stockée, elle existe déjà. Elle s'appelle currval.


Guillaume.

Hors ligne

#5 09/02/2010 10:06:00

stomerfull
Membre

Re : procédure stockée avec postgres

Oui je sais que currval est utilisé pour retourner le last insert id mais que

dans currval il y a comme paramètre currval('languages_id_seq'); et cette paramètre  languages_id_seq est obtenu à partir de la procédure stockée get_sequence qui est une function si j'ai bien compris les documentations qui doit être défini et écrit

CREATE OR REPLACE FUNCTION get_sequence(...)
RETURNS ...
.....
LANGUAGE ’pgsql’ ;

et c'est la que je bloque

Hors ligne

#6 09/02/2010 10:46:47

gleu
Administrateur

Re : procédure stockée avec postgres

Nous aussi. Il faudrait un peu mieux décrire votre problème. On ne sait même pas ce que votre procédure doit renvoyer, les paramètres qu'elle doit accepter en entrée...


Guillaume.

Hors ligne

#7 09/02/2010 17:49:57

dverite
Membre

Re : procédure stockée avec postgres

Apparement l'idée est de porter sous PG le last_insert_id() de MySQL. Pour ce faire le bout de code en PHP va chercher dans l'insert la table destination et en déduit le nom de la séquence.
A mon sens, l'ensemble doit être remplacé par un simple SELECT lastval()

Hors ligne

Pied de page des forums