sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Använda lagrade procedurresultat för att definiera en IN-sats

Vilken returtyp har din nuvarande lagrade procedur? Du talar om "en lista", så TEXT?

Det kanske finns ett enklare sätt, men en sak du kan göra (i en annan lagrad procedur) är att skapa en annan fråga.

För att göra det måste vi kringgå två begränsningar av MySQL:a) För att exekvera dynamisk SQL i en lagrad procedur måste det vara en förberedd sats. b) Förberedda satser kan endast skapas av användarvariabler. Så hela SQL är:

SET @the_list = myStoredProc();
SET @the_query = CONCAT('SELECT * FROM myTable WHERE columnName IN (' , @the_list , ')');
PREPARE the_statement FROM @the_query;
EXECUTE the_statement;

Om du pratar om att returnera en resultatuppsättning från en lagrad rutin och sedan använda den som tabell, är det inte möjligt. Du måste skapa en tillfällig tabell för att kringgå denna begränsning .




  1. "Fråga inte tillåten i Waitfor" Fel 101 i SQL Server

  2. MySQL i Docker returnerar Servern begärde autentiseringsmetod okänd för klienten

  3. "Kan inte släppa utlösaren" Fel när du försöker släppa en inloggningsutlösare? Prova detta.

  4. Hur infogas multidimensionella arrayer i en MySQL-tabell?