sql >> Databáze >  >> RDS >> Mysql

dynamický dotaz mysql v uložené proceduře

Kód chyby:1054. Neznámý sloupec 'SPA' v 'klauzuli where'

K tomu dojde, když neuzavřete vstupní řetězec do uvozovek a stroj SQL se jej pokusí identifikovat jako sloupec v dotazované tabulce. Ale selže, protože to nemůže najít.

Ale co se stane, když takový sloupec najde?
Načte výsledky, když najde nějaké shody v hodnotách sloupce.
Tohle samozřejmě není to, co člověk očekával.

Jak to překonat? Použijte připravené příkazy s dynamickými vstupními hodnotami.

Můžete použít zástupné symboly jako ? v uložených procedurách také na dynamických vstupních hodnotách pro použití s ​​Prepared Statements . Když je stroj přiřazen k výrazům SQL nebo je v rámci nich porovnáván, zpracuje znaky escape a další hodnoty řetězce.

Stačí podle potřeby znovu přiřadit vstupy procedury jedné nebo více proměnným relace.

Příklad vašeho postupu :

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_fetch_array, mysql_fetch_assoc, mysql_fetch_object

  2. Jak z databáze dostat DateTime s možnou hodnotou Null

  3. Entity Framework 6 – Časové dotazy

  4. Příklady ISJSON() v SQL Server (T-SQL)