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

mysql dynamisk forespørgsel i lagret procedure

Fejlkode:1054. Ukendt kolonne 'SPA' i 'where clause'

Dette sker, når du ikke omslutter inputstrengen i anførselstegn, og SQL-motoren forsøger at identificere den som en kolonne i tabellen, der forespørges. Men den fejler, da den ikke kan finde den.

Men hvad sker der, når den finder en sådan kolonne?
Den henter resultater, når den finder nogle match på kolonneværdierne.
Det er selvfølgelig ikke, hvad man havde forventet.

Hvordan kan man overvinde dette? Brug Prepared Statements med dynamiske inputværdier.

Du kan bruge pladsholdere som ? i lagrede procedurer også på dynamiske inputværdier til brug med Prepared Statements . Motoren vil håndtere escape-tegn og andre strengværdier, når den tildeles til eller sammenlignes i SQL-udtryk.

Du skal blot omtildele procedureinput til en eller flere sessionsvariabler, efter behov.

Eksempel på din procedure :

CREATE PROCEDURE `test1`( IN tab_name VARCHAR(40), IN w_team VARCHAR(40) )
BEGIN
  SET @t1 = CONCAT( 'SELECT * FROM ', tab_name, ' where team = ?' ); -- <-- placeholder
  SET @w_team := w_team;

  PREPARE stmt3 FROM @t1;
  EXECUTE stmt3 USING @w_team; -- <-- input for placeholder
  DEALLOCATE PREPARE stmt3;
END;


  1. Konfigurer opstartsmiljø i SQL Server Management Studio (SSMS) - SQL Server / TSQL vejledning del 7

  2. OPTION (GENKOMPILER) er altid hurtigere; Hvorfor?

  3. Brug af MySQL-visninger

  4. Forsøger at få ejendom af ikke-objekt - CodeIgniter