Exécutez une requête dans une base de données MySQL procédure stockée si une condition est vraie
Je suis en utilisant la base de données MySQL et d'essayer de créer une procédure stockée. Comment puis-je faire en sorte que si le résultat de la requête1 a pas de dossiers, puis exécuter une autre requête?
Voici ce que j'ai à ce jour:
/* CREATE DB */
CREATE DATABASE mydata;
use mydata;
/* TABLE */
CREATE TABLE mydata (
ID BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(255) NOT NULL,
Value VARCHAR(255) NOT NULL
) ENGINE=InnoDB;
INSERT INTO mydata (Name, Value) VALUES ("testname", "testvalue");
/* STORED PROCEDURE */
delimiter //
CREATE PROCEDURE myproc(IN myTable VARCHAR(255),
IN myValue VARCHAR(255),
IN myValueTwo VARCHAR(255))
BEGIN
SET @iTable=myTable;
SET @iValue=myValue;
SET @iValueTwo=myValueTwo;
SET @query = CONCAT('SELECT Name FROM ', @iTable,
' WHERE Value="', @iValue, '"');
SET @querytwo = CONCAT('SELECT Name FROM ', @iTable,
' WHERE Value="', @iValueTwo, '"');
PREPARE QUERY FROM @query;
EXECUTE QUERY;
END //
delimiter ;
/* CALL */
call myproc("mydata", "testvalue", "");
Je veux exécuter une requête, et d'exécuter un secondaire de requête que si la première n'a pas de ligne. Quelle est la meilleure façon de le faire?
- est-il nécessaire que les tables et les insérer déclaration doit être dynamique? À l'aide de sql dynamique n'est pas la bonne approche.
Vous devez vous connecter pour publier un commentaire.
Cela a pris un certain travail, mais j'ai fait suffisamment de réglages. Le problème avec votre code n'a rien à voir avec votre logique, mais avec MySQL Procédure Stockée la Langue elle-même. Quand on fait du SQL dynamique, Il a de délimitation de l'étendue des problèmes.
Ce que j'ai fait était de créer une table temporaire et déposé la valeur retournée dans il
Voici quelques exemples de données chargé
Voici la procédure stockée ajusté pour attraper les valeurs de retour dans une table temporaire
OK, j'ai appelé la procédure stockée trois temps. Le premier ne reçoit rien. Le second obtient le deuxième valeur. Le troisième reçoit la première valeur.
Lui donner un essai !!!
Dans mysql, vous pouvez utiliser le
found_rows()
construit dans la procédure comme ceci:Dans mssql vous pouvez utiliser la valeur
@@rowcount
. Vous pouvez ensuite exécuter la deuxième requête que si la première requête a retourné aucune ligne:Dans Sql Server, vous pouvez exécuter les résultats dans une table temporaire et de vérifier ensuite la table temporaire pour les lignes comme ceci:
Mon plus simple code de travail