Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/11/2010, 19h59   #1
Invité de passage
 
Inscription : février 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 7
Points : 1
Points : 1
Par défaut Petite question de débutant sur procédure stockée

Bonjour,

je me mets gentiment aux procédures stockées et j'aimerais comprendre d'où vient mon erreur sur le code suivant (même si une telle procédure stockée n'a pas un réel intérêt, c'est plus pour comprendre)

- Soit une table news contenant les champs id, title, content
- Je souhaite un limit de 0, X et donc définir la variable X

Code :
1
2
3
4
5
6
7
8
DELIMITER $$
CREATE PROCEDURE GetLastNews(IN tt TINYINT)
BEGIN
	SELECT id, title, content
	FROM vs_news
	ORDER BY date DESC
	LIMIT 0, tt;
END $$
Le problème vient visiblement de tt dans le LIMIT 0, tt étant donné que sans ça fonctionne.

J'aimerais donc comprendre pourquoi ma procédure ne fonctionne pas.

Merci d'avance pour le coup de main!
Flexii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2010, 20h22   #2
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
En jetant un oeil sur internet, je viens de lire que mysql n'accepte pas limit dans un procédure stockée
becket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 08h15   #3
Invité de passage
 
Inscription : février 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 7
Points : 1
Points : 1
Merci pour ta réponse.

Aurais tu le lien de ta source éventuellement?

Flexii
Flexii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 11h52   #4
Membre confirmé
 
Avatar de GyZmoO
 
Homme Mickaël
Ingénieur développement logiciels
Inscription : février 2006
Messages : 401
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : février 2006
Messages : 401
Points : 234
Points : 234
Envoyer un message via MSN à GyZmoO
Salut.

Le début d'une explication :

http://bugs.mysql.com/bug.php?id=11918

Sinon, pour contourner tu peux toujours utiliser un curseur.

@+
__________________
define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.
GyZmoO est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 18h04   #5
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 802
Points : 1 255
Points : 1 255
C'est faux LIMIT est permis mais TU DOIS utiliser des valeurs littérales et non des variables, relisez bien!!!

Le contournement simple est de faire une requête préparée dans pour exécuter la tâche.

Code sql :
1
2
3
4
5
6
7
8
DELIMITER $$
CREATE PROCEDURE GetLastNews(IN tt TINYINT)
BEGIN
	DECLARE ordre varchar(255) DEFAULT concat("SELECT id, title, content FROM vs_news ORDER BY date DESC LIMIT 0, ",tt);
	PREPARE exe FROM ordre;
	EXECUTE ordre;
	DEALLOCATE PREPARE exe;
END $$
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h57.


 
 
 
 
Partenaires

Hébergement Web