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

Създаване на динамична заявка в съхранена процедура MySQL

Вие свързвате pArea параметър в SQL без кавички. Тоест, съдържанието на @Query което подготвяте за изпълнение е:

SELECT PinCode FROM Areas WHERE AreaName = Teynampet

Тъй като Teynampet е без кавички, той се анализира като (n неизвестен) SQL идентификатор, а не като низ. Трябва или:

  • цитирайте го във вашия SQL:

    SET @City  = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
    
  • предайте го на подготвената инструкция като параметър:

    SET @City  = CONCAT(' WHERE AreaName = ?');
    SET @param = pArea;
    

    и след това:

    EXECUTE stmt USING @param;
    

Въпреки това, защо да използвате подготвени изявления тук? Вашата процедура може да бъде пренаписана като прост SELECT (което повдига въпроса дали изобщо трябва да използвате съхранена процедура):

CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
  SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');

(Обърнете внимание, че бих ви препоръчал да използвате NULL вместо празния низ '' , в който случай горният тест ще бъде pArea IS NULL OR pArea = AreaName ).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете последно въведен идентификатор от доктрина и собствена mysql заявка

  2. Как да използвам специални символи в имената на колони в MySQL?

  3. Как да създадете атака с инжектиране на SQL с Shift-JIS и CP932?

  4. ON DUPLICATE KEY:уникално ограничение за няколко колони

  5. Как да напишете HQL JOIN заявка за избрани колони от множество таблици с помощта на конструктор в клаузата за избор