sql >> Database >  >> RDS >> Mysql

Dynamische query maken in opgeslagen procedure MySQL

Je voegt de pArea samen parameter in de SQL zonder aanhalingstekens. Dat wil zeggen, de inhoud van @Query die u voorbereidt op uitvoering is:

SELECT PinCode FROM Areas WHERE AreaName = Teynampet

Sinds Teynampet zonder aanhalingstekens is, wordt het geparseerd als een (onbekende) SQL-identificatie in plaats van een tekenreeks. U moet ofwel:

  • citeer het in je SQL:

    SET @City  = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
    
  • geef het door aan het voorbereide statement als een parameter:

    SET @City  = CONCAT(' WHERE AreaName = ?');
    SET @param = pArea;
    

    en dan:

    EXECUTE stmt USING @param;
    

Maar waarom zou u hier voorbereide verklaringen gebruiken? Uw procedure kan worden herschreven als een eenvoudige SELECT (wat de vraag oproept of je überhaupt een opgeslagen procedure moet gebruiken):

CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
  SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');

(Merk op dat ik u aanraad om NULL te gebruiken in plaats van de lege string '' , in welk geval de bovenstaande test pArea IS NULL OR pArea = AreaName zou zijn ).




  1. Rechten op Stored Procedure verlenen aan een andere gebruiker van Oracle

  2. Doe mee op dinsdag 9 april voor het laatste Microsoft Access-nieuws

  3. Voeg gegevens slechts één keer toe aan de sqlite-database en lees ze meerdere keren

  4. Ondersteunt PostgreSQL het transparant comprimeren van tabellen (fragmenten)?