MySQL запрос справки (как заявление) - PullRequest
2 голосов
/ 20 мая 2009

Я использую mysql, у меня есть хранимая процедура, которая имеет входную переменную.

Я хочу использовать эту переменную в операторе select (с предложением like).

Например:

DELIMITER $$

DROP PROCEDURE IF EXISTS `DeleteDataByTransactionID` $$
CREATE DEFINER=`root`@`%` PROCEDURE `DeleteDataByTransactionID`(in **$TransactionID** varchar(50))

BEGIN

delete from sqlstatements where tempsql like '%'+ **$TransactionID** + '%';

END $$


DELIMITER ;

Спасибо

Ответы [ 2 ]

8 голосов
/ 20 мая 2009
DELIMITER $$
DROP PROCEDURE IF EXISTS `DeleteDataByTransactionID`
$$
CREATE DEFINER=`root`@`%` PROCEDURE `DeleteDataByTransactionID`(TransactionID VARCHAR(50))
BEGIN
        DELETE
        FROM    sqlstatements
        WHERE   tempsql LIKE CONCAT('%', TransactionID, '%');
END
$$
DELIMITER ;
2 голосов
/ 18 августа 2009

На самом деле, версия принятого ответа открыта для внедрения SQL, если вызывающая сторона неправильно параметризовала вызов хранимой процедуры. Я бы порекомендовал использовать подготовленную инструкцию в хранимой процедуре следующим образом для обеспечения безопасности вместо того, чтобы полагаться на вызывающего:

DELIMITER $$
CREATE PROCEDURE `DeleteDataByTransactionID`
(
    TransactionID VARCHAR(50)
)
BEGIN

SET @sql = 
 "DELETE 
  FROM sqlstatements
  WHERE   
     tempsql LIKE CONCAT('%', ?, '%')";

SET @transid  = TransactionID;

PREPARE stmt FROM @sql;
EXECUTE stmt USING @transid;
DEALLOCATE PREPARE stmt;

END
$$
...