본문 바로가기
MySql

MySQL에서 절차를 호출하는 방법은 무엇입니까?

by 베이스 공부 2020. 12. 12.
반응형

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

 

 

반응형

댓글