현재 절차에서 다음 코드 스 니펫이 있습니다. apps.fnd_global. apps_initialize
메서드 실행은 FORALL 루프의 일부입니다.PLSQL- FORALL 루프를 종료하는 방법
apps.fnd_global. apps_initialize
을 회신에 회신하고 싶습니다. 삽입이 끝나면 apps.fnd_global. apps_initialize
은 한 번만 실행해야합니다.
어떻게하면됩니까?
FORALL i IN 1 .. my_array.COUNT
INSERT
INTO my_table
......
COMMIT;
apps.fnd_request.submit_request (application => 'PO',
program => 'REQIMPORT',
argument1 => l_p4,
argument2 => l_p5,
argument3 => l_p6,
argument4 => '',
argument5 => 'N',
argument6 => 'N');
COMMIT;
예 FORALL은 비즈니스 로직을 적용 할 수 없습니다. 여기 당신의 경우에 당신은 그 안의 절차를 부릅니다. 대답에서 언급 한 것처럼 FOR 루프를 사용해보십시오. DML 만 허용됩니다. –
참고 : forall 루프는 SQL 엔진 내부에서 N 번 (N ='my_array.count') 횟수의 문을 실행하여 매우 빠르고 단일의 SQL 문을 생성합니다. 'for' 루프는 PLSQL 루프이며, 결과적으로'N' 컨텍스트가 PLSQL 엔진과 SQL 엔진 사이를왔다 갔다합니다. 'N'이 충분히 큰 경우, 이것은 눈에 띄는 지연을 가질 것입니다. 먼저 'forall'을 사용하여 모든 데이터를 삽입 한 다음 별도의 for 루프를 사용하여 사후 처리를 수행하는 것이 더 효율적일 수 있습니다. 말하자면, 100 또는 1000 개의 행은 문제가되지 않습니다. – GolezTrol
@GolezTrol 당신은 100 ~ 1000 행'FORALL' 또는'for 루프'에 아무런 차이가 없다고 말하고 싶습니까? – user75ponic