这是我的代码
Drop procedure if exists test//
CREATE PROCEDURE test(IN woeid VARCHAR(15))
BEGIN
SET @w1 := woeid;
SET @sql = CONCAT('CREATE OR REPLACE VIEW temp
AS
SELECT *
FROM test_table gp
WHERE gp.name =', @w1);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END//
Delimiter ;
call test('ABCD');
我收到错误了 错误代码:1054。'where'子句中的未知列'ABCD'
请帮忙。
答案 0 :(得分:3)
听起来好像你不必要地使用视图,而其他一些方法则更合适。
但是,它不起作用的原因是你没有引用你的字符串文字,因此生成的SQL包含WHERE gp.name = ABCD
,而它至少需要WHERE gp.name = 'ABCD'
。您可以使用MySQL的QUOTE()
函数来实现此目的,但最好对该值进行参数化:
DELIMITER //
DROP PROCEDURE IF EXISTS test//
CREATE PROCEDURE test(IN woeid VARCHAR(15))
BEGIN
SET @w1:=woeid, @sql:=CONCAT('
CREATE OR REPLACE VIEW temp AS
SELECT *
FROM test_table
WHERE name = ?
');
PREPARE stmt FROM @sql;
EXECUTE stmt USING @w1;
DEALLOCATE PREPARE stmt;
SET @w1:=NULL, @sql:=NULL;
END//
DELIMITER ;
CALL test('ABCD');