0

하나는 SYS_REFCURSOR (OUT param) 유형의 p_cursor이고 다른 하나는 INT (IN param) 유형의 p_rank입니다. 그러나 그것은 오류를 보여줍니다.SYS_REFCURSOR을 out 매개 변수로 갖는 mysql 프로 시저를 생성하는 중 오류가 발생했습니다.

DELIMITER $$ 
CREATE PROCEDURE sp_student(p_cursor OUT SYS_REFCURSOR,p_rank IN INT) 
    BEGIN 
    OPEN p_cursor FOR SELECT * FROM student WHERE rank = p_rank; 
    END$$ 
DELIMITER ; 

I가지고있어 어떤 오류,

Error Code : 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUT SYS_REFCURSOR,p_rank IN INT) 
    BEGIN 
    OPEN p_cursor FOR SELECT * FROM st' at line 1 

내가 SYS_REFCURSOR에 대한 문법적으로 잘못된 생각 해요 .. 내 코드를 확인하고 내 실수를 실현 주시기 바랍니다. 사전에 감사

+0

MySql에는 Oracle에서와 같이 REFCURSOR가 없습니다.이 답변을 참조하십시오 : http://stackoverflow.com/questions/7155790/what-is-the-equivalent-of-oracles-ref-cursor-in-mysql – krokodilko

+0

in mysql , 프로 시저에서 레코드 세트를 반환하려면 프로 시저 본문에 select 문을 직접 작성하는 대신 params와 sys_refcursor를 유지할 필요가 없습니다. 코르 디코 씨? –

+0

이 링크 읽기 : http://dev.mysql.com/doc/refman/5.5/en/faqs-stored-procs.html#qandaitem-B-4-1-14. 프로 시저의 결과 집합은'직접 클라이언트에 반환됩니다 (MySQL, MySlqWorkbench, PHP, JDBC, ODBC 등). 그러나 프로 시저가 다른 프로 시저에서 호출 된 경우 호출 프로 시저에서이 결과 집합을 읽을 수 없습니다. 하나의 프로 시저에서 다른 프로 시저로 많은 행을 전달하는 데 임시 테이블을 사용할 수 있습니다. – krokodilko

답변

2

mysql을 나던 유무 refcursor u는 MySQL의 설정 여러 행/결과를 반환하는 저장 프로 시저를 작성하는 계획 r에 경우 오라클처럼, 단지 할

DROP procedure IF EXISTS `sample`; 
DELIMITER $$ 
CREATE PROCEDURE `sample`(p_rank IN INT) 
BEGIN 
select * from MyTable where id=p_rank; 
END$$ 
DELIMITER ; 

호출 샘플(); 결과 세트가 리턴됩니다. 너를 사용할 수있어.