sql >> Databasteknik >  >> RDS >> Mysql

mysql dynamisk fråga i lagrad procedur

Felkod:1054. Okänd kolumn 'SPA' i 'where-sats'

Detta händer när du inte omger indatasträngen inom citattecken och SQL-motorn försöker identifiera den som en kolumn i tabellen som frågas. Men den misslyckas eftersom den inte kan hitta den.

Men vad händer när den hittar en sådan kolumn?
Den hämtar resultat när den hittar några matchningar på kolumnvärdena.
Det är uppenbarligen inte vad man förväntade sig.

Hur kan man övervinna detta? Använd Prepared Statements med dynamiska ingångsvärden.

Du kan använda platshållare som ? i lagrade procedurer också på dynamiska inmatningsvärden att använda med Prepared Statements . Motorn kommer att hantera escape-tecken och andra strängvärden när den tilldelas eller jämförs inom SQL-uttryck.

Du behöver bara omtilldela proceduringångar till en eller flera sessionsvariabler efter behov.

Exempel på din procedur :

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. MySQL dynamisk pivot

  2. Tidsdel av ett DateTime-fält i SQL

  3. MS SQL Server på Linux vs Windows Performance Test för att upptäcka skillnaden

  4. Hur skapar man index på JSON-fältet i Postgres?