5
이것은 MySQL 5.1입니다.MySQL : 프로 시저 매개 변수를 EXECUTE USING 문으로 전달
(참고 :이 내 진짜 코드가 아닙니다 내가이 특정 예를하는 더 나은 방법이 실현) : 나는 그것을 호출 할 때 아래의 절차가 생성됩니다,하지만
여기는 내가하고 싶은 것입니다 나는 "ERROR 1210 (HY000) : 잘못된 인수를 실행하기 위해"수
DELIMITER //
CREATE PROCEDURE get_users_by_state(IN state CHAR(2))
READS SQL DATA
BEGIN
SET @mystate = state;
SET @sql = CONCAT('SELECT * FROM test_table WHERE state = "?"');
PREPARE stmt FROM @sql;
EXECUTE stmt USING @mystate;
END;
//
CALL get_users_by_state('AA')//
ERROR 1210 (HY000): Incorrect arguments to EXECUTE
대한 EXECUTE 사용 문에 프로 시저의 매개 변수를 전달하는 방법이 있나요? 여기 실제로 작업을 수행하는 버전입니다, 그러나 저 irks : 사이드 질문으로
CREATE PROCEDURE get_users_by_state(IN state CHAR(2))
READS SQL DATA
BEGIN
SET @sql = CONCAT('SELECT * FROM test_table WHERE state = "', state, '"')
PREPARE stmt FROM @sql;
EXECUTE stmt;
END;
//
를, MySQL은) (포스트 그레스 '을 quote_literal()와에서 quote_ident와 같은 문자열을 탈출을 위해 어떤 시설이 있습니까?
참조 점에 대한, 여기에 포스트 그레스 다소 상응하는 무언가가있다 :
CREATE OR REPLACE FUNCTION get_info_by_state(character)
RETURNS SETOF ret_type AS
$BODY$
DECLARE
sql text;
BEGIN
sql := 'SELECT uid, some_data FROM test_table WHERE state = ' || quote_literal($1);
RETURN QUERY EXECUTE sql;
END
$BODY$
LANGUAGE 'plpgsql' VOLATILE
감사합니다!
: 오해가 없을 않도록
여기에 업데이트, SET @Sql = CONCAT를 ('test_table SELECT * FROM을 WHERE 상태 ='상태); 는 그 다음 컴파일,하지만 난 그것을 호출 할 때, 내가 얻을 : MySQL의> 통화 get_users_by_state ('AA')가 // ERROR 1054 (42S22) : '절 곳' 그래서이 알 수없는 열 'AA'는 서라운드 그것은 어떤 수준에서 따옴표로 보입니다, 그것은 –
입니다. 나는 매개 변수 홀더가있는 버전을 의미했지만 연결은 아닙니다. 'SET @sql = 'SELECT * FROM test_table WHERE state =?'; ' – ChssPly76
아, 알겠습니다. 나는 그것을 테스트 할 것이지만, 내가 그 예제를 작동시킬 수 있다면, 내 질문에 대한 답을 얻을 것이다. ( –