MySQL은 저장 프로 시저에서 결과 집합을 어떻게 반환합니까?


16

웹 응용 프로그램에서 사용하기 위해 저장 프로 시저를 둘러 보려고합니다. MySQL 저장 프로 시저의 마지막 명령문이 무엇이든 해당 프로 시저의 결과 집합으로 취급되는 것으로 보입니다. 불행히도, MySQL 문서에는 프로 시저가 여러 결과 세트를 리턴 할 수 있다고 말하는 참조가있는 것 같습니다. 이 동작은 어떻게 발생합니까? MySQL 서버에 하나의 결과 집합 만 명시 적으로 반환하도록하려면 어떻게해야합니까?

(예를 들어, SELECT와 몇 가지 삽입을 수행하는 쿼리가 있습니다. 클라이언트에 삽입에 대해 알리고 싶지 않지만 클라이언트에게 SELECT의 결과 집합을 제공하고 싶습니다 ....)

답변:


17

테이블이나 변수에 삽입되지 않은 각 SELECT 문은 결과 집합을 생성합니다.

저장 프로 시저가 하나의 결과 집합 만 반환하도록하려면 SELECT 문이 하나만 있어야합니다. 다른 SELECT 문이 있으면 결과를 테이블 또는 변수에 삽입해야합니다.

업데이트
다음은 저장 프로 시저의 예입니다.

이 저장 프로시 저는 하나의 결과 집합을 반환합니다.

DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
    DECLARE local_variable_name INT;

    SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;

    SELECT * FROM table_1;
END;;
DELIMITER ;

이 저장 프로시 저는 두 가지 결과 집합을 반환합니다.

DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
    DECLARE local_variable_name INT;

    SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;

    SELECT * FROM table_1;

    SELECT * FROM table_2;
END;;
DELIMITER ;

아, 그래서 테이블이나 변수에 들어가면 결과로 포함되지 않습니까? 어떻게 접근 할 수 있습니까? 예를 들어 SELECT INTO?
Billy ONeal

네, 첫 질문입니다. 나는 당신의 두 번째 질문에 명확하지 않습니다. 저장 프로 시저 내에서 로컬 변수에 값을 저장하려면 다음과 같이 실행하십시오 SELECT column_name LIMIT 1 INTO local_variable_name;.
dabest1

위의 샘플 쿼리는 다음과 같아야합니다 SELECT column_name FROM table LIMIT 1 INTO local_variable_name;.
dabest1

? 내가 다른 저장 프로 시저에서 호출 stored_procedure_name 후 변수를 얻으려면 내가 커서, 전화 get_info_user_visitstatistics에 대한 DECLARE의 c_dept의 커서 () 구문 오류를 사용하는 경우, 나는 결과는 = 전화 stored_procedure_name은 (); 그 해결 방법을 설정할 수 없습니다
아미타
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.