2017-11-03 3 views
0

Oracle 11에서는 PL/SQL 함수에서 char 목록을 반환하려고했지만 성공하지는 않았습니다. 내가 테스트를 위해 만든이 코드를 자신의 실행을 이해하기위한 몇 가지 어려움 ... 예를 들어PL/SQL에서 목록을 반환하는 방법

이있어 다음 fonction는 컴파일의 문제없이 생성

create type test is table of varchar(500); 
/

CREATE OR REPLACE FUNCTION test2 (id INT) 
RETURN test 
is 
tt_t test; 
BEGIN 

SELECT descriptifSpecifique INTO tt_t(1) 
FROM DECOMPOSE 
where idRecette=id 
AND idEtape=2; 


SELECT descriptifSpecifique INTO tt_t(2) 
FROM DECOMPOSE 
where idRecette=id 
AND idEtape=3; 
RETURN tt_t; 
END; 
/


show errors function test; 

을하지만, 실행시, 이 메시지가 있습니다 : ORA-06531 : 초기화되지 않은 컬렉션에 대한 참조입니다.

또한 어떻게 PL/SQL에서 유형 (varchar 및 select로 생성 된 int 포함)을 반환 할 수 있습니까? 내가 RECORD와 형태의 선언을하고,이 유형을 반환 할 때 유형이 declarated되지 않기 때문에, 내가 컴파일의 문제가 있기 때문에 당신은 기본적으로 제대로 일을

답변

1

...

감사합니다. 그러나 새로운 요소를 넣기 전에 컬렉션을 EXTEND해야합니다.

개인적으로 나는 EXTEND을 피하고 각 색인에서 항목을 관리하기 위해 개인적으로 컬렉션에 BULK COLLECT을 선호합니다. 이 (테스트되지 않은 코드)처럼 : OBJECT 타입과 객체 형 TABLE OF :

CREATE OR REPLACE FUNCTION test2 (id INT) 
RETURN test 
is 
tt_t test; 
BEGIN 

SELECT descriptifSpecifique 
BULK COLLECT INTO tt_t 
FROM DECOMPOSE 
where idRecette=id 
AND idEtape IN (2,3) 
ORDER BY idEtape; 

RETURN tt_t; 
END; 
/

당신은 두 가지 유형을 생성해야하는 TYPE 가진 여러 열을 반환합니다. 그래서 같이

, 그리고

CREATE TYPE test_rec IS OBJECT (a_varchar VARCHAR2(500), a_number NUMBER); 

CREATE TYPE test_tbl IS TABLE OF test_rec; 

, 당신은 그에 따라 기능을 수정할 수 있습니다

CREATE OR REPLACE FUNCTION test2 (id INT) 
RETURN test_tbl 
is 
tt_t test_tbl; 
BEGIN 

SELECT test_rec(idEtape, descriptifSpecifique) 
BULK COLLECT INTO tt_t 
FROM DECOMPOSE 
where idRecette=id 
AND idEtape IN (2,3) 
ORDER BY idEtape; 

RETURN tt_t; 
END; 
/
+0

가 완벽하게 작동 u를 많이 감사합니다. 내 다른 질문에 대한 아이디어가 있으십니까? – BaaLa

+0

죄송합니다. 두 번째 부분을 보지 못했습니다. 내 대답을 업데이트 할게. –

+0

감사합니다. 그들은 OBJECT와 RECORD의 차이점이 있습니까? – BaaLa

관련 문제