sql >> Database teknologi >  >> RDS >> Mysql

MySQL - Brug af lagrede procedureresultater til at definere en IN-sætning

Hvilken returtype har din nuværende lagrede procedure? Du taler om "en liste", så TEKST?

Måske er der en nemmere måde, men én ting du kan gøre (i en anden lagret procedure) er at bygge en anden forespørgsel.

For at gøre det skal vi omgå to begrænsninger af MySQL:a) For at udføre dynamisk SQL inde i en lagret procedure, skal det være en forberedt sætning. b) Forberedte udsagn kan kun oprettes ud fra brugervariabler. Så den komplette SQL er:

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;

Hvis du taler om at returnere et resultatsæt fra en lagret rutine og derefter bruge det som tabel, er det ikke muligt. Du skal lave en midlertidig tabel for at omgå denne begrænsning .




  1. Bedste praksis til lagring af databaseadgangskode

  2. Hvordan konfigureres PreparedStatement Caching med Postgres og Tomcat7 JDBC Pool?

  3. Hvornår skal man LÅSE TABELLER i MySQL (MyISAM-tabeller)?

  4. JSP-kodning under indsættelse af ikke-engelsk tekst i MySQL-databasen