2012-03-08 61 views
0

。这里的功能自定义mysql函数 - 无法传递参数作为标题状态向下

DELIMITER // 
CREATE FUNCTION GetCreateValue(table_name CHAR(64), id_field CHAR(64), name_field CHAR(64), name_value CHAR(64)) 
RETURNS INTEGER 
BEGIN 
    DECLARE ret INTEGER; 
    SELECT count(*) INTO ret FROM table_name WHERE name_field = name_value; 
    IF ret < 1 THEN 
     INSERT INTO table_name SET name_field = name_value; 
     SELECT id_field INTO ret FROM table_name WHERE name_field = name_value; 
    ELSE  
     SELECT id_field INTO ret FROM table_name WHERE name_field = name_value; 
    END IF; 
    RETURN ret; 
END// 
DELIMITER ; 

,当我运行像

SELECT GetCreateValue('table1', 'ID', 'name', '123456'); 

我得到一个错误,该表“表格名”简化版,存在。显然参数没有通过。为什么?

+0

很明显,参数**已被传递**,但它是一个“CHAR”,因为它是表名,所以不能使用。 – vulkanino 2012-03-08 10:07:31

回答

0
SET @qry = 
    CONCAT(
    'SELECT count(*) INTO ret FROM ', table_name, 
     ' WHERE ', name_field, 
     ' = ?'); 

PREPARE stmt1 FROM @qry; 
SET @v = name_value; 
EXECUTE stmt1 USING @v; 
DEALLOCATE PREPARE stmt1;