문제

나는 언어를 처음 접했고, 꼬리 통화가 최적화되었는지 궁금합니다. 다른 언어로서 나는 기계 코드 나 중간 표현을 검사하고 직접 알아낼 수 있지만 PL/SQL에서 어떻게 해야하는지 전혀 모른다.

미리 감사드립니다.

도움이 되었습니까?

해결책

온라인 문서는 다음과 같습니다.

http://download-east.oracle.com/docs/cd/b19306_01/appdev.102/b14261/subprograms.htm#i2884

각 재귀 호출은 매개 변수, 변수, 커서 및 예외를 포함하여 서브 프로그램에서 선언 된 모든 항목의 새 인스턴스를 만듭니다. 마찬가지로, 새로운 SQL 문 사례는 재귀 하강의 각 레벨에서 생성됩니다.

그리고:

적어도 하나의 경로는 종단 조건으로 이어져야합니다. 그렇지 않으면 PL/SQL이 메모리가 부족하여 사전 정의 된 예외 Storage_error를 올릴 때까지 재귀가 계속됩니다.

Tail Call 최적화를 사용할 수 있으면 스토리지가 부족하지 않습니다 (너무 오래 실행하면 시간 초과에 도달 할 수도 있지만).

실험적으로 수행하는 작업을 볼 수 있습니다. 테일 호출로 끝나는 재귀 함수를 작성하고 호출 할 때 Oracle 프로세스의 메모리 사용법을 관찰하거나 어떤 오류 메시지가 표시되는지 확인하십시오. 메모리가 증가하지 않고 무기한으로 매달릴 수 있는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top