69 votes

Comment avoir le SQL dynamique dans la procédure stockée MySQL

Comment créer et utiliser SQL dynamique dans une procédure stockée MySQL?

122voto

Timothy Points 1322

Après la version 5.0.13, dans les procédures stockées, vous pouvez utiliser le SQL dynamique:

 delimiter // 
CREATE PROCEDURE dynamic(IN tbl CHAR(64), IN col CHAR(64))
BEGIN
    SET @s = CONCAT('SELECT ',col,' FROM ',tbl );
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END
//
delimiter ;
 

Le SQL dynamique ne fonctionne pas dans les fonctions ou les déclencheurs. Voir la documentation MySQL pour plus d'utilisations.

56voto

Jason Stevenson Points 2334

Je ne crois pas que MySQL supporte sql dynamique. Vous pouvez le faire "préparé" des déclarations qui est similaire, mais différente.

Voici un exemple:

mysql> PREPARE stmt FROM 
    -> 'select count(*) 
    -> from information_schema.schemata 
    -> where schema_name = ? or schema_name = ?'
;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> EXECUTE stmt 
    -> USING @schema1,@schema2
+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)

Les requêtes préparées sont souvent utilisés pour voir un plan d'exécution pour une requête donnée. Depuis qu'ils sont exécutés avec l' exécution de la commande et le sql peut être affectée à une variable, vous pouvez approximative de la certains de le même comportement que le sql dynamique.

Voici un bon lien à ce sujet:

http://rpbouman.blogspot.com/2005/11/mysql-5-prepared-statement-syntax-and.html

Bonne Chance!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X