Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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()
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
Pages : 1