Création d'une procédure stockée

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Création d'une procédure stockée

par caidoz » 16 déc. 2008, 12:18

Merci à sadeq,
Maintenant je vois mieux comment je doit écrire mes procédures.

Par contre un autre soucis se présente à moi au niveau du DELIMITER (me suis renseigné a son sujet entre temps et voie clairement son utilité) mais je me demande si il est possible que l'hébergeur bloque cette commande ? (J'en doute sa serrais vraiment stupide de le faire)
Car quand je met le DELIMITER dans la requête j'obtient

Code : Tout sélectionner

MySQL a répondu:Documentation #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $' at line 1

EDIT : 16h00
RUTUDJUUUU!!!
depuis ce matin je suis sur mon DELIMITER et l'hébergeur est en phpmyadmin 2.6 si je ne m'abuse c'est à la version 2.10 que sa gère le DELIMITER non ?

par sadeq » 16 déc. 2008, 11:46

La syntaxe Mysql pour les procédures stockées varie sensiblement de celle de SQL Server et surtout au niveau de l'affectation de valeurs aux variables ou paramètres par l'instruction SELECT.

Il y a aussi le problème du délimiteur qui doit être porté à un caractère autre que ; (point virgule) qui est souvent utilisé pour séparer les requêtes à l'intérieur de la procédure.

Voici comment écrire ta procédure sous mysql:

Code : Tout sélectionner

DELIMITER $ CREATE PROCEDURE Select_User (IN _userNom varchar(50), OUT _userPass varchar(255), OUT _userLvl int) BEGIN SELECT _userPass=usr_Pass, _userLvl=usr_Lvl FROM Utilisateur WHERE usr_Nom=_userNom; END

par caidoz » 16 déc. 2008, 11:39

là j'obtiens :

Code : Tout sélectionner

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $
Mais j'avoue n'avoir absolument rien compris a propos de ces delimiter.
N'auriez vous pas un tutoriel à me proposer autre que les sites :

- http://dev.mysql.com/doc/refman/5.0/fr/ ... edure.html
- http://www.journaldunet.com
- http://www.manuelphp.com/php/pdo.prepar ... ements.php
ou même nexen ?

par furiouslol » 16 déc. 2008, 11:07

Salut

Ca serait pas un probleme de DELIMITER ?

Code : Tout sélectionner

DROP PROCEDURE IF EXISTS Select_User ; DELIMITER $ CREATE PROCEDURE Select_User ( ) BEGIN SET _userPass = (SELECT usr_Pass FROM Utilisateur WHERE usr_Nom=_userNom); SET_userLvl = (SELECT usr_Lvl FROM Utilisateur WHERE usr_Nom=_userNom); END ; $ DELIMITER ;

Création d'une procédure stockée

par caidoz » 16 déc. 2008, 10:28

Bonjour,
j'ai crée un petit projet personnel d'auto formation pour visual studio (C# winForm).
J'utilisais dans mon projet un Base de Donnée MS SQL Serveur (version manager).
Mon projet porte sur le classement et la recherche de position de yoga et intéresse finalement plusieurs amis.
Je souhaite donc leurs passer le .EXE mais vu que la BD est uniquement sur mon PC sa bloque (logique).
Je souhaite donc passer la base de donnée sur mon hébergeur sous MySql 5.0.45
Là j'essaie simplement de convertir mes procédures stockées.
Voici le code de mon "ancienne" procédure :

Code : Tout sélectionner

Create PROCEDURE Select_User @user_Nom nvarchar(50), @user_Pass nvarchar(255) OUTPUT, @user_Lvl int OUTPUT AS SET @user_Pass = (SELECT usr_Pass FROM Utilisateur WHERE usr_Nom=@user_Nom) SET @user_Lvl = (SELECT usr_Lvl FROM Utilisateur WHERE usr_Nom=@user_Nom) RETURN
J'ai donc essayer de traduire cela en :

Code : Tout sélectionner

CREATE PROCEDURE Select_User (IN _userNom varchar(50), OUT _userPass varchar(255), OUT _userLvl int) BEGIN SET _userPass = (SELECT usr_Pass FROM Utilisateur WHERE usr_Nom=_userNom); SET_userLvl = (SELECT usr_Lvl FROM Utilisateur WHERE usr_Nom=_userNom); END
Mais lors de l'exécution j'obtiens l'erreur
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
Je cherche depuis hier après midi comment se font les procédures sous MySql et les doc que je trouve ou exemple ne me sont pas clair et n'arrive pas a trouver mon erreur ?

(Shéma de la base )

Code : Tout sélectionner

-- -------------------------------------------------------- -- -- Structure de la table `Yoga_Utilisateur` -- CREATE TABLE `Yoga_Utilisateur` ( `usr_ID` int(11) NOT NULL auto_increment, `usr_Nom` varchar(50) NOT NULL default '', `usr_Pass` varchar(255) NOT NULL default '', `usr_Lvl` int(11) NOT NULL default '0', PRIMARY KEY (`usr_ID`), UNIQUE KEY `usr_Nom` (`usr_Nom`) ) TYPE=MyISAM AUTO_INCREMENT=2 ; -- -- Contenu de la table `Yoga_Utilisateur` -- INSERT INTO `Yoga_Utilisateur` VALUES (1, 'MonNom', 'MonPassCryptéMd5', 1000);