2011-03-02 4 views
0

je un « ensemble » des instructions SQLComment créer une procédure stockée qui accepte un paramètre

DROP TABLE IF EXISTS data.s; 
CREATE TABLE data.s LIKE data._style; 
INSERT INTO data.s Values (?,?,?,?,?,?,?,?,?,?,?,?,?); 

UPDATE data.s n JOIN data.s_ o ON n.ID = o.ID SET n.TC = o.TC; 
UPDATE data.s n JOIN data.s_ o ON n.ID = o.ID SET n.VR = o.VR; 
UPDATE data.s n JOIN data.o_ o ON n.ID = o.ID SET n.OC = o.OC; 
DELETE FROM data.s WHERE TC <= 0; 
DELETE FROM data.s WHERE TC < 100; 
DELETE FROM data.s WHERE OC < 100 ; 

Utiliserez « s » table comme exemple, comment pourrais-je créer un SP où « s » est une variable , qui pourrait être remplacer par t, uv, z ...... quoi? Je voudrais changer cette variable avec une instruction d'appel SQL.

Répondre

2

MySQL ne gère pas le SQL dynamique réel, vous devez donc utiliser une instruction préparée.

Regardez la réponse acceptée: How To have Dynamic SQL in MySQL Stored Procedure et surtout le lien qu'il donne (partie SQL dynamique).

Quelque chose comme:

CREATE PROCEDURE `execute`(IN sqlQuery varchar(255)) 
BEGIN 

    set @sqlQuery := sqlQuery; 

    prepare stmp from @sqlQuery; 

    execute stmp; 

    deallocate prepare stmp; 

END 

CREATE PROCEDURE `yourProcName`(IN tableName varchar(50)) 
BEGIN 

    call execute(concat('DROP TABLE IF EXISTS ', tableName)); 
    call execute(concat('CREATE TABLE ', tableName, ' LIKE data._style')); 

    ... 

END 
+0

peut vous aider à coder moi il? – Merlin

+0

@ user428862: J'ai modifié mon post. – Xavinou

+0

Donc le 1er SP est le moteur d'exécution pour le 2ème SP, correct? Je comprends ça. :-). Il n'y a aucun changement pour exécuter SP. Ok, comment j'appellerais le 2ème Sp avec nom de table? 'Call yourProcName,: = nom_table', Ceci est proche !!! – Merlin

Questions connexes