본문 바로가기

Database/PLSQL

046 - [Oracle PL/SQL] Package - without body

<샘플코드에서 사용한 데이터는 HR 스키마이고, 오라클 설치시 생성할 수 있는 기본 스키마 입니다>

 

 

 

경우에 따라서 바디가 없는 패키지를 만들때가 있다. 아래와 같은 경우가 그러하다

 

 

# we can create package specification without body
# this used when we want to define global variable

create or replace package global_Measurement 
is

  c_mile_to_km   constant number:=1.6093;
  c_kilo_to_mile constant number:=0.6214;

end;

 

 

 

execute dbms_output.put_line('60 mile:='||60* global_Measurement.c_mile_to_km||' KM' );
----------------------------------------------------------------
60 mile:=96.558 KM



execute dbms_output.put_line('100 KM:='||100* global_Measurement.c_kilo_to_mile||' Mile' );
----------------------------------------------------------------
100 KM:=62.14 Mile

 

 

 

# 상수 패키지를 참고하는 함수 샘플
# now i can create function that read form this package

create or replace function get_mile_to_km
( p_value number )
return number
is
begin
  
  return p_value* global_Measurement.c_mile_to_km;
  
end;



select get_mile_to_km(100) from dual;
-----------------------------------------------------
GET_MILE_TO_KM(100)
-------------------
             160.93

 

 

 

# very good thing you should know
# you can define a procedure or function inside pl/sql block
# but this will be used only in this block
# 다른 블록이나 패키지에서는 get_sysdate 함수에 접근이 불가함.
# 로컬함수 또는 private 함수라고 부른다

declare
  function get_sysdate 
  return date
  is 
  begin
  return sysdate;
  end;
  
begin

 dbms_output.put_line(get_sysdate);
 
end;