스칼라 펑션의 경우
캐싱을 하려면
Select a.id
,(select fn_get_code( a.id ) from dual ) as name
From table
위와같은 형태로 듀얼로 한번 감싸주는것으로 알고 있습니다
한가지 궁금한것이
저렇게 했을경우 코드 값이 실제로 변경되었는데
캐싱에 의해 캐싱된 코드로 잘못 나올수도 있는건가요?
그렇다면 무조건 듀얼로 감싸는게 방법이 아닌거 같아서요
참고로 오라클 11g 입니다
조언 부탁드립니다 ^^
메인쿼리와 함수 내 쿼리는 수행 시점이 달라요.
쿼리 수행 도중에 다른 곳에서 값이 바뀌면 함수의 결과도 중간에 바뀌어 나옵니다.
서브쿼리 캐싱 기능을 이용한다면? 바뀌기 전 값이 유지 될 것입니다.
다만 패치 단위에서만 유효합니다. 패치사이즈가 10건이라면 10건까지만 유효합니다.
즉, 서브쿼리를 쓰든, 안쓰든 중간에 바뀐 값에 대한 보장은 하지 않습니다.
이건 사용자가 선택하고 감내해야 할 사항입니다.
다만, 그리 중요한 것 같지 않아서 신경 쓸 필요가 없다고 한 것이구요.
이게 중요한 사항이라고 생각한다면 선택을 해야 합니다.
1. 한결 같은 값을 원한다면? 함수 대신 조인으로 풀어야 합니다.
2. 실시간 변하는 값을 원한다면? 서브쿼리 없는 함수 사용.