sql >> Databasteknik >  >> RDS >> Mysql

MySql prepare-sats - är det möjligt att parametrisera kolumnnamn eller funktionsnamn?

Du kan inte parametrisera kolumn/tabell/funktionsnamn/alias. Som, PREPARE satsen tillåter endast att "värden" en del av SQL-frågan används som parametrar. Funktion/tabell/kolumnnamn/alias används för att fastställa SQL-satsens giltighet; och kan därför inte ändras under körning. Om du ändrar den vid körning kan det eventuellt ändras om SQL-satsen är giltig.

Du kan tänka på det som att kompilera en kod; därför måste kompilatorn känna till alla funktioner/klassnamn etc för att skapa en giltig körbar (ja, vi kan göra dynamiska klasser, men det är sällsynt ). Å andra sidan kan vi ändra indata "värden" till programmet, men kan i allmänhet inte ändra operationerna som ska utföras på indata.

MySQL-servern skulle också betrakta parametrarna som bokstavliga och applicera citattecken runt dem, innan de används för att köra frågor.

Nu, i ditt fall, kan du fortfarande använda funktionsnamnet som parameter för lagrad procedur och generera frågesträngen med den. Men du kan inte använda den som en parameter för själva frågan.

delimiter $$
create procedure test(in func varchar(20), in col varchar(20))
  begin

    set @c = col;

    -- use concat function to generate the query string using func parameter
    set @sql = concat('select ', func, '(?) from table');

    -- prepare the statement
    prepare stmt from @sql;

    -- execute
    execute x using @c;

    -- don't forget to deallocate the prepared statement
    deallocate prepare stmt;
  end$$
delimiter ;



  1. Hur man beviljar åtkomst till v$-visningar (v$session ,v$instance)

  2. SQL Server Massinsättning av CSV-fil med inkonsekventa citattecken

  3. Hur skickar man tabellvärderade parametrar från Java till SQL Server lagrad procedur?

  4. Är det möjligt att skicka tabellnamn som en parameter i Oracle?