대부분의 쿼리에 대해 저장 프로 시저를 사용해야하고 저장 프로 시저를 사용한 적이 없어야하는 플랫폼 (완벽한 형식)을 사용하고 있는데, 내가 뭘 잘못하고 있는지 파악할 수 없습니다. 다음 문장은 오류없이 실행됩니다 :
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
php_admin 3.2.4, PHP Version 5.2.12에서이 문장을 실행하고 있으며 mysql 서버 버전은 5.0.89-community입니다.
매개 변수를 반환하는 저장 프로 시저를 작성한 다음 선택하면 제대로 작동합니다 (예 :).
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;
총액에 문제가 없습니다.
궁극적으로, 내가해야 할 일은 저장 프로 시저에 싸인 멋진 SELECT 문을 가지고 있으므로 호출하고 여러 필드의 여러 행을 반환 할 수 있습니다. 지금은임의의작업을 선택하려고합니다.
도움을 주시면 감사하겠습니다.
- 답변 # 1
- 답변 # 2
이것이보고 된 버그인지 확인하려면 PHP 버전을 확인하십시오 (여기 참조).
이 포스트를보십시오 : 주어진 컨텍스트에서 결과 집합을 반환 할 수 없습니다
- 답변 # 3
이것은 아마도 저장 프로 시저/루틴 내에서 PHP와 SELECT를 다루는 버그를 중심으로합니다. 가능한 해결 방법 중 하나는 저장 프로 시저 내부에서선택 ... INTO를 사용하여 결과를 하나의 변수로 가져 오는 것입니다. 이것은 내가 읽은 다른 경우에도 효과가있었습니다.
SELECT * FROM category INTO c;
- 답변 # 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 | +-----+
PHP 5.3.1, phpMyAdmin 3.2.4에서 MySQL 5.1.41을 사용하고 있습니다.
아마도 방금 프로 시저 이름의 철자가 틀렸습니까?
아니면 PHP 또는 MySQL 설치에 문제가있을 수 있습니까? (아마도 버그 일 수 있습니다. 최신 버전으로 업데이트 해 보셨습니까?)
관련 자료
- sql - MySQL은 CTE 내부에 변수를 설정했습니다 "select"는 괜찮지 만 "set"은 작동하지 않습니다
- sql - MySQL 테이블 열을 사용하지 않고 두 열 사이의 범위 날짜 선택
- MySQL - mysql - null을 포함한 모든 left join 선택
- html - PHP를 사용하여 mysql db에서 특정 필드를 선택하고 에코
- join - 문에서 중첩 선택으로 업데이트하면 mysql이 작동하지 않습니다
- tidyeval - `dplyr` 동사와 함께 인용되지 않은 문자열 사용 - `select` 및`arrange`가 다르게 작동 함
- MySQL - mysql - 선택 하위 쿼리의 개수가 null 인 경우 0으로 변경
- sql - MySQL의 값을 기반으로 필드 선택
- sql - 열이 목록의 요소를 포함하는 MySQL 선택 행
- indexing - GIN 인덱스는`SELECT 1`에서 작동하지 않지만 PostgreSQL에서`SELECT COUNT (*)`를 수행하면 작동합니다
- 날짜 선택 도구를 실행할 때 다중 선택이 작동하지 않고 Excel에서 VBA로 자동 맞춤
- sql - mysql - 두 개의 테이블, 1 개의 프로덕션 및 1 개의 아카이브가 있습니다 일부 레코드가 동일하므로 둘 다에서 별개의 레코드를 선택해야합니다
- MySQL 조건에서 IF 선택
- MySQL 80에서 더 이상 테이블 "그룹"에서 데이터를 선택할 수없는 이유
- sql - MySQL 동일한 SELECT 문에서 저장된 함수의 결과를 매개 변수로 어떻게 사용할 수 있습니까?
- sql - 키가있는 한 행이 다른 행보다 큰 MySQL 테이블에서 키 값을 선택합니다
- sql - MySQL 선택 쿼리는 여러 ID를 포함하는 행을 가져옵니다
- sql - mysql - select * 및 다른 필드 구문
- NET Core Web API SQL Server 저장 프로 시저
- MYSQL 쿼리에서 UPDATE 내에서 선택하는 방법
- 저장 프로 시저 MySQL을 두 번 이상 업데이트
- python : SQL BETWEEN 포괄적으로 작동하지 않음
- mysql : 테이블 변경 및 기본값을 현재 날짜로 설정
- MYSQL-금요일을 "주말"로 계산하면 "주 시작"이 4 월이고 "주말"이 5 월일 때 "null"이 반환됩니다. 어떻게 수정합니까?
- javascript : { "error": { "code": "ER_PARSE_ERROR", "errno": 1064, "sqlMessage": "SQL 구문에 오류가 있습니다.
- php : 다른 테이블에서 자식 테이블의 여러 레code 이동
- mysql : Clickhouse에서 기본 키 및 외래 키의 기능을 어떻게 사용할 수 있습니까?
- php : 오랜 시간이 걸리는 SQL 업데이트
- sql : 저장 함수 또는 저장 프로 시저를 사용하여 firebird 3.0에서 테이블 반환
- mysql : SQL에 입력 할 유일한 데이터를 지정하는 방법이 있습니까?
알았다. 이것은 PHP의 버그가 아닙니다. (이전의 경우 였지만) phpmyadmin의 일부 버전에서는 버그입니다. 동일한 버그가 간헐적으로 다시 나타난 후 다양한 하위 버전에서 수정되었습니다 (위 참조).
이 동작은phpmyadmin 내의 저장 프로 시저 내의 SELECT 문으로 제한됩니다.
MySQL Workbench와 같은 클라이언트를 사용하면이 문제를 해결할 수 있습니다 (또는 phpmyadmin을 업그레이드 할 수는 있지만 나처럼 공유 서버를 사용하는 경우 고통 스럽습니다).
어쨌든 여러분의 도움에 감사합니다.