2012-01-16 2 views
2

인터넷에서 이것을 찾으려고 노력하고 있지만 어디에서나 찾을 수 있습니다.오라클 저장 프로 시저에서 배열 결과를 얻는 방법

CREATE OR REPLACE PROCEDURE Read() 
IS 
    BEGIN 
     SELECT * FROM Books; 
    END; 
/

결과 및 배열로 저를 얻을 것이다 : 내가 좋아하는 Oracle 저장 프로 시저의 무언가를 갖고 싶어. 그래서이 oracle 저장 프로 시저의 PHP 배열 결과에서 검색하고 싶습니다. 너는 그것을 바꿔 주시겠습니까? PHP에서 배열을 얻었을 때 데이터를 쉽게 가져올 수 있습니까? 미리 감사드립니다.

답변

2

배열을 반환하지 않을 것으로 생각됩니다. 대신 저장 프로 시저에서 REF CURSOR을 반환 할 것으로 판단됩니다. 당신이 정말로 (다른 자원 중 서버에 훨씬 더 PGA 공간을 사용하는 것입니다) PL/SQL에서 배열을 반환하려면

CREATE OR REPLACE PROCEDURE Read(p_rc OUT SYS_REFCURSOR) 
AS 
BEGIN 
    OPEN p_rc 
    FOR SELECT * 
     FROM books; 
END; 

, 당신은

CREATE TYPE book_typ 
    AS OBJECT (
    <<list of columns in BOOKS>> 
); 

CREATE TYPE book_tbl 
    AS TABLE OF book_typ; 

CREATE OR REPLACE PROCEDURE Read(p_arr OUT book_tbl) 
AS 
BEGIN 
    SELECT <<list of columns>> 
    BULK COLLECT INTO p_arr 
    FROM books; 
END; 

그것은 거의 것이라고 할 수 REF CURSOR을 반환하는 대신이 방법으로 코드를 구조화하는 것은 결코 의미가 없습니다. 훨씬 더 효율적이지 않고 훨씬 더 많은 서버 리소스를 사용하여 확장 성을 줄입니다. 또한 PL/SQL에서 직접 XML을 생성하는 다양한 방법이 있습니다.

+0

문제 배열을 읽고 XML로 변환하기위한 클래스가 있으므로 커서에 대해 본 적이 있으므로 배열을 반환하고 싶습니다. 커서 대신 배열에 대해이 작업을 수행 할 수 있습니까? – Denonth

+0

누구나 아는 사람일까요? – Denonth

+0

@Denmonth - 필자는 PL/SQL 배열이 out 매개 변수 인 접근 방법을 포함하도록 내 대답을 확장했습니다. –

관련 문제