programing

하나의 단일 SQL SELECT 범위에 대해 DECIALISTIC과 유사한 PL/SQL 프래그마가 있습니까?

sourcejob 2023. 9. 11. 21:37
반응형

하나의 단일 SQL SELECT 범위에 대해 DECIALISTIC과 유사한 PL/SQL 프래그마가 있습니까?

SQL에서SELECT진술, 나는 그것의 범위에 대해 결정론적인 함수를 실행하고 싶습니다.SELECTstatement(또는 트랜잭션도 괜찮을 것입니다)

select t.x, t.y, my_function(t.x) from t

의 많은 가치들.t.x동일하므로 Oracle은 작업 속도를 높이기 위해 동일한 함수를 몇 번이고 호출하는 것을 생략할 수 있습니다.하지만 이 기능에 다음과 같은 라벨을 붙이면DETERMINISTIC, 결과는 이 쿼리의 여러 실행 사이에 캐시될 수 있습니다.사용할 수 없는 이유DETERMINISTIC이유는my_function은(는) 수시로 변경되는 구성 매개 변수를 사용합니다.

제가 사용할 수 있는 다른 키워드가 있습니까?주의해야 할 문제점(메모리 문제, 동시성 등)이 있습니까?또는 함수를 한 번만 호출하는 분석 함수와 같은 다른 트릭이 있을 수 있습니다.t.x(중요한 성능에 영향을 미치지 않는) 가치?

이렇게 하면 다음과 같습니다.

select t.x, t.y, (select my_function(t.x) from dual)
from t

그러면 Oracle은 하위 쿼리 캐싱을 사용하여 함수 호출을 줄일 수 있습니다.

이것은 당신의 질문에 대한 답이 아니라 당신에게 해결책이 될 수 있습니다.말씀하신 이 구성 파라미터는 기능할 파라미터로 추가할 수 없습니까?이 경우에는.my_function(t.x, val1)다른 것 vs.my_function(t.x, val2).

단순한 해결 방법으로는 첫 번째 함수를 호출하는 두 번째 결정적 함수를 만드는 것이 있습니다. 그러나 두 번째 함수가 함수를 사용하는 각 쿼리에서 다른 리터럴 값을 제공하는 추가적인 무의미한 매개 변수를 사용하도록 하는 것입니다.

또 다른 방법은 함수를 패키지에 넣고 결과를 전역 변수로 설정하는 것입니다.그런 다음 함수를 호출할 때 입력 변수가 이전과 동일한지 확인하고 그런 경우 글로벌 변수를 빠르게 반환합니다.

SQL> create or replace package temp is
  2
  3    function blah ( PIndex integer ) return integer;
  4
  5  end temp;
  6  /

Package created.

SQL>
SQL> create or replace package body temp is
  2
  3    GResult integer := 0;
  4    GIndex integer;
  5
  6    function blah ( PIndex integer ) return integer is
  7
  8      begin
  9
 10        if Gindex = Pindex then
 11          return Gresult;
 12        else
 13          GIndex := Pindex;
 14          GResult := Pindex;
 15        end if;
 16
 17        return Gresult;
 18
 19      end blah;
 20
 21  end temp;
 22  /

Package body created.

SQL>
SQL> select temp.blah(1) from dual;

TEMP.BLAH(1)
------------
           1

SQL>
SQL> select temp.blah(1) from dual;

TEMP.BLAH(1)
------------
           1

SQL>
SQL> select temp.blah(2) from dual;

TEMP.BLAH(2)
------------
           2

SQL>

언급URL : https://stackoverflow.com/questions/7270467/is-there-a-pl-sql-pragma-similar-to-deterministic-but-for-the-scope-of-one-sing

반응형