2011-06-23 5 views
0

Je dois effectuer la même procédure pour plusieurs tables dans ma base de données. Le poblem est que cette procédure contient la ligne suivante:MySQL: Une procédure stockée pour plusieurs tables

DECLARE tableIt CURSOR FOR select id from table where column=inputParam ; 

table est la table la procédure fonctionne avec. Et je ne peux pas trouver un moyen de rendre ce nom de table dynamique, c'est-à-dire de le lire à partir d'un paramètre d'entrée.

Actuellement, j'ai 8 procédures différentes (une pour chaque table) qui ne se différencient que par un mot (le nom de la table). C'est vraiment une douleur car je dois faire tous les changements à la procédure 8 fois.

Est-il possible de paramétrer l'instruction select pour le CURSOR afin que je puisse avoir une seule procédure ??

Répondre

0

Les curseurs dynamiques ne semblent pas être pris en charge dans Mysql. http://dev.mysql.com/doc/refman/5.1/en/cursors.html

Vous pouvez travailler autour

http://forums.mysql.com/read.php?98,133197,149099#msg-149099

"DROP VIEW SI EXISTE v1;

SET @ STMT_TEXT = CONCAT (" CREATE VIEW v1 C_TEXTE AS SELECT FROM », t_name);

PREPARER DE stmt @stmt_text;

EXECUTE stmt;

BEGIN

DECLARE v_text VARCHAR (45);

DECLARE fait INT DEFAULT 0;

DECLARE c curseur POUR SELECT C_TEXTE DE v1,.. »

+0

Bonne idée, je pense qu'il est préférable d'utiliser une table temporaire, si une vue est un objet global donc il n'y a pas de fil de sécurité si vous utilisez ce (deux connexions peuvent essayer de créer la même vue pour des tables différentes.) – GetFree

+0

Le problème avec la table temporaire est qu'elle va être une insertion et peut être lente Vous pouvez toujours avoir un problème avec l'accès simultané à cette table temporaire. semble aussi simple pourquoi ne pas le tirer de votre code java/perl/php? Vous pouvez ensuite avoir des requêtes dynamiques construites. – isobar

Questions connexes