Mysql
 sql >> база данни >  >> RDS >> Mysql

Изявление за подготовка на MySql - възможно ли е да се параметризира име на колона или име на функция?

Виене можете параметризира име на колона/таблица/функция/псевдоним. Като, PREPARE израз позволява да се използва само част от "стойности" от SQL заявката като параметри. Функция/Таблица/Име на колона/псевдоним се използват за определяне на валидността на SQL израза; и по този начин не може да бъде променен по време на изпълнение по време на изпълнение. Промяната му по време на изпълнение потенциално би променила дали SQL изразът е валиден.

Можете да мислите за това като компилиране на код; следователно компилаторът трябва да знае всички имена на функция/клас и т.н., за да създаде валиден изпълним файл (да, можем да правим динамични класове, но това е рядко ). От друга страна, можем да променим входните "стойности" в програмата, но по принцип не можем променете операциите, които трябва да се извършват върху входните данни.

Също така MySQL сървърът ще разглежда параметрите като литерали и ще прилага кавички около тях, преди да ги използва при изпълнение на заявка.

Сега, във вашия случай, все още можете да използвате името на функцията като параметър за Съхранена процедура и да генерирате низа на заявката, използвайки това. Но не можете да го използвате като параметър за самата заявка.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изпълнява ли се тригера BEFORE INSERT за всеки ред във вмъкване при заявка за актуализиране на дублиран ключ

  2. SQL Където ВСЯКАКВА колона е равна на стойност

  3. Където клаузата работи, не работи на tinyint

  4. Генериране на сол Crypt() и криптиране на парола, добре изпълнени?

  5. Кой тип данни на MySQL да използвате за IP адрес?