2010-11-19 2 views
3

저장 프로 시저은 변경할 수 없습니다. 커서에 결과의 열 수가있는을 반환합니다. 거기에 오라클의 간단한 방법은 BULK COLLECT INTO 커서의 하위 집합만을 제공 하는가?Oracle Cursor에서 열의 하위 집합을 일괄 수집

FOR 루프 및 새 컬렉션 유형은 피해야합니다. 나는 커서에서 모든 데이터를 가져오고 싶지 않다. 단지 필요한 데이터이다. 커서에서 예를 들어

BULK COLLECTION INTO 모든 열은 작동합니다 다음

FETCH s_cursor BULK COLLECT INTO staff_ids; 
+0

흠, 새로운 컬렉션 유형에 대한 추가 제한 사항을 추가했습니다. 어떤 문제를 해결하려고합니까? 성능을 향상시키는 것입니까? –

+0

예, 기본적으로 성능 누출을 피하기 위해 언어의 모든 리소스를 사용하고 싶습니다. 필요 이상으로 많은 데이터를 가져 오지 않으려면 저장 프로 시저를 복사하고 불필요한 열을 제거해야한다고 생각합니다. 비록 코드 중복을 초래할지라도. – Leonid

+1

그래, 성능 누출을 피하려면 수정 된/새 저장 프로 시저가 필요합니다. 커서를 연 후 원치 않는 열을 삭제하면 데이터베이스가 이미 모든 노력을 다했기 때문에 성능 누출이 이미 발생했습니다. –

답변

2

짧은 대답은 "아니오"입니다. 저장 프로 시저를 변경시키지 않으면 원치 않는 작업 중 하나를 수행하거나 새로운 저장 프로 시저를 작성하여 네가 원해.

1

당신은 즉시 원치 않는 열을 처분 할 수 없다. 필요하지 않은 컬렉션을

fetch s_cursor bulk collect into t_col1, t_col2, t_col3; 

및 삭제 :

type c_col1 is table of s_cursor.col1%type index by pls_integer; 
type c_col2 is table of s_cursor.col2%type index by pls_integer; 
type c_col3 is table of s_cursor.col3%type index by pls_integer; 
t_col1 c_col1; 
t_col2 c_col2; 
t_col3 c_col3; 

및 대량이 테이블에 수집 :

이 같은 커서의 각 열에 대해 PL/SQL 테이블을 선언 할 수 :

t_col2.delete; 
t_col3.delete; 

그러나 이것은 ulk 커서에서 모든 열을 수집하고 원하지 않는 열이없는 것으로 가장합니다.

관련 문제