2013-06-03 4 views
2

나는 다음과 같은 노력하고있어하지만 난 다음 오류 받고 있어요에서 테이블을 만들기 : fcreatetableTest의 매개 변수이기 때문에MySQL의 저장 프로 시저 오류 PARAM 이름

ERROR 1054 (42S22): Unknown column 'f' in 'where clause' 

내가 심각하게 혼란 스러워요 ... f 이후

CREATE PROCEDURE createtableTest 
(
tname2 varchar(20), 
f varchar(20) 
) 
BEGIN 
DROP TABLE IF EXISTS tname2; 
CREATE TABLE tname2 as SELECT * FROM data WHERE group_name like f; 
END; 
+0

@JW 웃음, 정확히 무엇을 편집하셨습니까? 'sql' 태그를 추가 했습니까? 나는 특정 질문이 MySQL과 관련 있다고 확신한다. –

답변

2

동적 SQL은 우리가 원래의 질의와 함께 연결할 수 있도록 필요한 값을 포함한다

DELIMITER $$ 

CREATE PROCEDURE createtableTest(IN tname2 varchar(20),IN f varchar(20)) 
BEGIN 
    DROP TABLE IF EXISTS tname2; 
    SET @sql = CONCAT('CREATE TABLE tname2 as SELECT * FROM data WHERE group_name like ''%',f,'%'''); 
    PREPARE stmt FROM @sql; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
END $$ 

DELIMITER ; 
,

예를 들어, f의 값이 hello되면, 연결된 문자열이 외에 연결에서 UPDATE

CREATE TABLE tname2 as SELECT * FROM data WHERE group_name like '%hello%' 

생산합니다, 당신은 또한 매개 변수화 할 수있는 가치가 가장 좋은 방법, 예

DELIMITER $$ 

CREATE PROCEDURE createtableTest(IN tname2 varchar(20),IN f varchar(20)) 
BEGIN 
    DROP TABLE IF EXISTS tname2; 
    SET @sql = CONCAT('CREATE TABLE tname2 as SELECT * FROM data WHERE group_name like ?'); 
    PREPARE stmt FROM @sql; 
    SET @val = CONCAT('%', f, '%'); 
    EXECUTE stmt USING @val; 
    DEALLOCATE PREPARE stmt; 
END $$ 

DELIMITER ; 
+0

아하 ... 그래,이 작품. 나는 이것에 관해 읽을 필요가있다. –

+0

나는':)'답변을 업데이트했다. –

+0

감사합니다. 이건 정말 내 질문에 대답 했어! –