복붙노트

[SQL] SELECT 작동하지 MySQL을 저장 프로 시저 (기본 질문)

SQL

SELECT 작동하지 MySQL을 저장 프로 시저 (기본 질문)

나는 내가 잘못을 뭘하는지 알아낼 수 없습니다 내 쿼리의 대부분을 저장 프로 시저를 사용하는 저를 필요로하는 플랫폼 (perfectforms)를 사용하고, 저장 프로 시저를 사용한 적이 한. 다음 문은 오류없이 실행 :

DELIMITER //
DROP PROCEDURE IF EXISTS test_db.test_proc//
CREATE PROCEDURE test_db.test_proc() SELECT 'foo'; //
DELIMITER ;

하지만 사용하여 전화를 할 때 :

CALL test_proc();

나는 다음과 같은 오류가 발생합니다 :

#1312 - PROCEDURE test_db.test_proc can't return a result set in the given context

내가 phpMyAdmin을 3.2.4 내에서 다음 문을 실행하고, PHP 버전 5.2.12과 MySQL의 서버 버전은 5.0.89 - 커뮤니티입니다.

내가 선택한 그 반환 매개 변수 저장 프로 시저를 작성하고시, 일 잘 작동 (예를 들어)

DELIMITER //
DROP PROCEDURE IF EXISTS test_db.get_sum//
CREATE PROCEDURE test_db.get_sum(out total int)
BEGIN
SELECT SUM(field1) INTO total FROM test_db.test_table;
END //
DELIMITER ;

벌금을 작동하고, 나는 그것을 호출 할 때 :

CALL get_sum(@t); SELECT @t;

나는 합계에게 문제를 얻을 수 없습니다.

내가 전화를하고, 여러 분야의 여러 행을 반환 할 수 있도록 궁극적으로, 나는, IS 저장 프로 시저에 싸서 멋진 SELECT 문이 무엇을 필요가있다. 지금은 그냥 어떤 선택 작업을 얻기 위해 노력하고있어.

어떤 도움도 대단히 감사합니다.

해결법

  1. ==============================

    1.그것을 알아 냈다. 이것은 (예전하지만) PHP와 버그가 아닙니다 - 그것은 phpMyAdmin을 일부 버전의 버그입니다. 같은 버그 간헐적 다시 표시하고 다양한 전복 (위 참조)에 고정되어있다 :

    그것을 알아 냈다. 이것은 (예전하지만) PHP와 버그가 아닙니다 - 그것은 phpMyAdmin을 일부 버전의 버그입니다. 같은 버그 간헐적 다시 표시하고 다양한 전복 (위 참조)에 고정되어있다 :

    #1312 - PROCEDURE [name] can't return a result set in the given context
    

    이 동작은 phpMyAdmin을 내부에 저장 프로 시저 내에서 문을 선택으로 제한 나타납니다.

    MySQL의 워크 벤치와 같은 클라이언트를 사용하여 문제를 해결 작동 (또는 당신은 phpMyAdmin을 업그레이드 할 수 있지만 내가 당신처럼 공유 서버에 있다면 그 고통이다).

    어쨌든, 당신의 도움에 대한 모든 사람들에게 감사합니다.

  2. ==============================

    2.이보고 된 버그가 있는지 확인하기 위해 당신의 PHP 버전을 확인합니다 (여기 참조).

    이보고 된 버그가 있는지 확인하기 위해 당신의 PHP 버전을 확인합니다 (여기 참조).

    이 게시물을 참조 : 주어진 상황에서 결과 집합을 반환 할 수 없습니다

  3. ==============================

    3.이것은 아마도 PHP와 버그 거래 중심 및 저장 프로 시저 / 루틴 내에서 SELECT된다. 한 가지 가능한 해결책은 하나 개의 변수까지 결과를 가져올에 저장 프로 시저의 SELECT ... INTO의 내부를 사용하는 것입니다. 이것은 내가 읽어 다른 경우했다.

    이것은 아마도 PHP와 버그 거래 중심 및 저장 프로 시저 / 루틴 내에서 SELECT된다. 한 가지 가능한 해결책은 하나 개의 변수까지 결과를 가져올에 저장 프로 시저의 SELECT ... INTO의 내부를 사용하는 것입니다. 이것은 내가 읽어 다른 경우했다.

       SELECT * FROM category INTO c;
    
  4. ==============================

    4.때 나는 다음을 실행합니다 :

    때 나는 다음을 실행합니다 :

    DELIMITER //
    DROP PROCEDURE IF EXISTS test_db.test_proc//
    CREATE PROCEDURE test_db.test_proc() SELECT 'foo'; //
    DELIMITER ;
    

    다음에

    CALL test_db.test_proc();
    

    나는 나에게 같은 결과 집합을 보여줍니다

    +-----+
    | foo |
    +-----+
    | foo |
    +-----+
    

    나는 phpMyAdmin을 3.2.4과 PHP 5.3.1, MySQL은 5.1.41을 사용하고 있습니다.

    아마 당신은 당신의 프로 시저 이름의 철자? 아니면 PHP 나 MySQL의 설치에 문제가 될 수 있을까? (아마도 버그가. 최신 버전으로 업데이트하려고 했습니까?)

  5. from https://stackoverflow.com/questions/2360371/mysql-stored-procedures-not-working-with-select-basic-question by cc-by-sa and MIT license