MySQL에서 프로 시저를 조사하기 시작했지만 모든 노력이 작동하지 않습니다. 내 프로 시저 생성은 다음과 같습니다.
DELIMITER //
CREATE PROCEDURE test(IN a INT)
BEGIN
SELECT *
FROM `table`
WHERE `id` = a;
END
MySQL은 오류없이 O.K.를 반환합니다.
DELIMITER ;
MySQL은 오류없이 O.K.를 반환합니다.
그러나 CALL-Statement는 작동하지 않습니다.
CALL test(8);
오류를 반환합니다. # 1312-PROCEDURE dbxyz.test는 주어진 컨텍스트에서 결과 집합을 반환 할 수 없습니다.
이제 내가 뭘 잘못했는지 모르겠다 : 프로 시저 생성의 실수 나 CALL- 문의 오류.
-> #########################
2014 년 2 월 6 일 현재 : 오늘 저는 phpMyAdmin의 쿼리 창에서 내 저장 프로 시저가 작동하지 않는 이유를 알아 보려고했습니다. 'SELECT *'는 스토어드 프로 시저 내에서 작동하지 않지만 컬럼 별 SELECT 컬럼은 작동합니다. 내가 알아 낸 것은 다음과 같습니다. IN과 OUT과 INTO를 사용합니다. 예:
DELIMITER //
CREATE PROCEDURE test(IN a INT, OUT b VARCHAR(12), OUT c INT)
BEGIN
SELECT b, c
FROM `table`
WHERE `id` = a
INTO b, c;
END
이제이 저장 프로시 저는 phpMyAdmin에서 실행할 수 있습니다.
call test(5, @result1, @result2);
SELECT @result1, @result2
둘 이상의 결과가 아닌 하나의 결과 만 필요한 경우 SET-Statement를 사용할 수도 있습니다. 여기 있습니다 :
DELIMITER //
CREATE PROCEDURE test(IN a INT, OUT b INT)
BEGIN
SET b = ( SELECT b
FROM table
WHERE id = a );
END
해결 방법
위의 주석도 참조하십시오.
오늘은 내 저장 프로 시저가 작동하지 않는 이유를 알아 보려고 노력했습니다. A 'SELECT *' does not work within a Stored Procedure, but a SELECT column by column does work. Here is what I have found out: DELIMITER // CREATE PROCEDURE test(IN a INT, OUT b VARCHAR(12), OUT c INT) BEGIN SELECT b, c FROM table WHERE id = a INTO b, c; END Now I can run my Procedure: call test(5, @result1, @result2); SELECT @result1, @result2 – Peter
참조 페이지 https://stackoverflow.com/questions/21391811
'MySql' 카테고리의 다른 글
MySQL Ubuntu 12.04에서 MySQL 용 Toad를 설치하는 방법 (0) | 2020.12.12 |
---|---|
MySQL LOAD DATA INFILE을 사용하여 MySQL 테이블로 가져올 때 CSV 파일의 열을 건너 뛰는 방법은 무엇입니까? (0) | 2020.12.12 |
MySQL ExpressJS를 사용하여 XML로 어떻게 응답 할 수 있습니까? (0) | 2020.12.12 |
MySQL 준비된 진술 및 수레 (0) | 2020.12.12 |
MySQL PDO로 연결 제한 시간 설정 (0) | 2020.12.12 |
댓글