2017-12-21 3 views
0

내 프로젝트에는 아래에 이미 작성된 코드가 있습니다. 나는 아래 코드에서 .delete가 무엇을하는지 이해하려고 노력하고있다.커서 변수 .delete는 무엇을합니까?

CURSOR cur_somecur IS 
select * from SomeTable; 

TYPE my_cur_ty IS TABLE OF MyTable%ROWTYPE INDEX BY BINARY_INTEGER; 
my_cur  my_cur_ty; 

FETCH cur_somecur BULK COLLECT 
INTO my_cur LIMIT 1000; 

... 

LOOP 

FORALL idx IN 1 .. my_cur.count SAVE EXCEPTIONS /* This is understood */ 

... 
my_cur.delete; /* What does this do ? */ 

END LOOP; 
... 
+0

'delete'는 커서 변수가 아닙니다. 그것은 당신의 경우 컬렉션 전체를 삭제하는 콜렉션 메소드이다 :'my_cur' –

+0

코드 끝에서 DELETE가 사용되지 않으면 어떻게 될까? DELETE는 메모리를 지우는 데 사용됩니까? 그냥 추측 – user2488578

+0

'my_cur'는 콜렉션 (배열)입니다. 그것이 커서가 아닌 커서와 관련이 있다고 제안하기 때문에이 이름은 오해의 소지가 있습니다. PL/SQL은 자체 가비지 콜렉션 (https://en.wikipedia.org/wiki/Garbage_collection_ (computer_science))을 수행하기 때문에 일반적으로 PL/SQL에서 변수를 삭제할 필요가 없습니다. –

답변

0

이렇게 사용하면 MY_CUR 컬렉션에서 모든 요소가 삭제됩니다.

Collection methods

이 절차는 세 가지 형태가 있습니다. DELETE는 컬렉션에서 모든 요소를 ​​제거합니다. DELETE (n)은 연관 배열 또는 중첩 테이블에서 n 번째 요소를 제거합니다. n가 null의 경우, DELETE (n)는 아무것도 실시하지 않습니다. DELETE (m, n)은 연관 배열 또는 중첩 테이블에서 m..n 범위의 모든 요소를 ​​제거합니다. m이 n보다 큰 경우, 또는 m 또는 n가 null의 경우, DELETE (m, n)는 아무것도 실시하지 않는다.

+0

코드 끝에서 DELETE를 사용하지 않으면 어떻게됩니까? DELETE는 메모리를 지우는 데 사용됩니까? 그냥 짐작하면 .. – user2488578

+0

"Oracle PL/SQL Collection 메모리 회수"를보십시오. http://ksun-oracle.blogspot.hr/2013/06/oracle-plsql-collection-memory-reclaim.html. 다양한 시나리오를 보여 주며 진행 상황을 설명합니다. – Littlefoot

+0

감사합니다 ................ – user2488578

관련 문제