<샘플코드에서 사용한 데이터는 HR 스키마이고, 오라클 설치시 생성할 수 있는 기본 스키마 입니다>
해당 세션이 유지되는 동안, 패키지 내부의 변수가 값을 기억하고 있는 것을 의미한다.
아래 샘플코드는 패키지 내부에 변수를 선언하고 해당 변수에 입력받은 값을 저장하는 패키지 이다.
create or replace package Persistent_state
is
g_var number:=10;
procedure update_g_var ( p_no number);
end;
/
create or replace package body Persistent_state
is
procedure update_g_var ( p_no number)
is
begin
g_var:=p_no;
dbms_output.put_line(g_var);
end;
end;
패키지 내부의 변수 g_var 에 저장된 값이 세션이 유지되는 동안에는 g_var 변수의 값도 유지가 된다.
그래서 새로운 변수에 할당하면 80이 저장되고 출력해보면 동일한 결과를 보인다.
execute Persistent_state.update_g_var(80);
variable test number;
execute :test:=Persistent_state.g_var;
print test
---------------------
TEST
----------
80
declare
x number;
begin
x:=Persistent_state.g_var;
dbms_output.put_line (x);
end;
-----------------------------------------------------------------------------------
80
하지만 다른 세션으로 접속하면 값이 10으로 나온다.
declare
x number;
begin
x:=Persistent_state.g_var;
dbms_output.put_line (x);
end;
---------------------------------
10
패키지 내부 변수값을 패키지 내부에서만 유지하고 싶다면 PRAGMA SERIALLY_REUSABLE 옵션을 사용하면된다.
# using PRAGMA SERIALLY_REUSABLE;
# 이렇게 처리하면 g_var 값은 해당 패키지 내부에서만 값을 유지한다.
create or replace package Persistent_state
is
PRAGMA SERIALLY_REUSABLE;-- this is the main point.
g_var number:=10;
procedure update_g_var ( p_no number);
end;
/
create or replace package body Persistent_state
is
PRAGMA SERIALLY_REUSABLE;
procedure update_g_var ( p_no number)
is
begin
g_var:=p_no;
dbms_output.put_line(g_var);
end;
end;
이전과 다른 결과값이 나오는 것을 볼 수 있다.
execute Persistent_state.update_g_var(90);
variable test number;
execute :test:=Persistent_state.g_var;
print test
-------------
TEST
----------
10
'Database > PLSQL' 카테고리의 다른 글
056 - [Oracle PL/SQL] Package - index by tables in packages (0) | 2024.03.07 |
---|---|
055 - [Oracle PL/SQL] Package - Persistent State and cursor (0) | 2024.03.07 |
053 - [Oracle PL/SQL] Package - Forward Declaration (0) | 2024.03.06 |
052 - [Oracle PL/SQL] Package - Overloading (standard package) (0) | 2024.03.06 |
051 - [Oracle PL/SQL] Package - Overloading (functions) (1) | 2024.03.06 |