PL/SQL에서 Associative 배열을 재설정하시겠습니까?
이것은 "더 좋은 방법이 있을거야" 라는 질문들 중 하나입니다.제가 문제를 설정하고 나서 해킹된 제 솔루션을 드릴 테니, 더 나은 솔루션을 제안해 주시기 바랍니다.감사합니다!
PL/SQL에 대한 약간의 정보를 살펴보도록 하겠습니다.
DECLARE
TYPE foo_record IS RECORD (foo%type, bar%type);
TYPE foo_records IS TABLE OF foo_record INDEX BY PLS_INTEGER;
arr_foos foo_records;
CURSOR monkeys is SELECT primates FROM zoo;
row_monkey monkeys%rowtype;
BEGIN
FOR row_monkey IN monkeys loop
/*
at this point in each iteration I need to have the associative array
arr_foos in its original state. if this were java, I'd declare it
right here and its scope would be limited to this iteration. However,
this is not java, so the scope of the array is effectively global and
I can't have one iteration's data meddle with the next.
*/
null;
END LOOP;
END;
이해 하셨나요?저는 기본적으로 그것을 무언가로 리셋할 필요가 있습니다.0에서 시작하는 숫자라면 그냥 숫자를 말할 수 있을 겁니다.=0; 모든 반복의 맨 위에 위치하며 완료됩니다.하지만 이건 숫자가 아니라 그냥 깨끗한 상태로 리셋할 수 있는 타입입니다 :=0.
어쨌든, 내 해킹에 대해:
DECLARE
TYPE foo_record IS RECORD (foo%type, bar%type);
TYPE foo_records IS TABLE OF foo_record INDEX BY PLS_INTEGER;
arr_foos foo_records;
arr_foos_reset foo_records;
CURSOR monkeys is SELECT primates FROM zoo;
row_monkey monkeys%rowtype;
BEGIN
FOR row_monkey IN monkeys loop
arr_foos := arr_foos_reset;
null;
END LOOP;
END;
같은 유형의 멤버를 원래 상태로 유지할 수 있다면 작업 변수를 원래 값으로 다시 설정할 수 있습니다.그리고, 놀랍게도, 그것은 효과가 있습니다 (제 생각에는).)하지만 더 좋은 방법이 있을 겁니다누가 도와줄 수 있습니까?
감사합니다!
가장 쉬운 방법:
arr_foos.Delete();
다른 방법은 내부의 변수를 선언하는 것입니다.FOR
루프입니다. 이렇게 하면 패스마다 다시 생성됩니다.
다음과 같은 경우:
DECLARE
TYPE foo_record IS RECORD (foo%type, bar%type);
TYPE foo_records IS TABLE OF foo_record INDEX BY PLS_INTEGER;
CURSOR monkeys is SELECT primates FROM zoo;
row_monkey monkeys%rowtype;
BEGIN
FOR row_monkey IN monkeys loop
DECLARE
arr_foos foo_records;
BEGIN
null;
END;
END LOOP;
END;
동물원 테이블의 데이터를 수집품으로 읽을 건가요?그러면 더 좋은 방법이 있습니다.
DECLARE
type foos_ts is table of zoo.foo%type index by pls_integer;
foos foos_t;
BEGIN
select foo
bulk collect into foos
from zoo;
...
END;
대량 수집은 가져오기 전에 자동으로 수집을 지웁니다. 루프에서 행 단위로 읽는 것보다 더 빠르게 작동합니다.안타깝게도 레코드와 함께 작동하지 않기 때문에 각 필드별로 여러 개의 PL/SQL 테이블이 필요합니다.
BULK COLLECT 절을 사용하여 쿼리 결과를 컬렉션으로 검색하는 방법은 여기에서 확인할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1731818/resetting-an-associative-array-in-pl-sql
'programing' 카테고리의 다른 글
중첩된 재활용자 보기 높이가 내용을 감싸지 않습니다. (0) | 2023.10.22 |
---|---|
MySQL Workbench에서 여러 SQL 쿼리를 실행하는 방법은? (0) | 2023.10.17 |
UINT_MAX는 모든 비트가 1로 설정되어 있습니까? (0) | 2023.10.17 |
inotify와 epoll의 차이 (0) | 2023.10.17 |
윈도우즈 7 x64/VS2012에 컴파일이 필요한 노드 모듈을 설치할 수 없음 (0) | 2023.10.17 |