본문 바로가기

Database/PLSQL

(119)
055 - [Oracle PL/SQL] Package - Persistent State and cursor 커서를 종료하지 않으면 현재 상태를 계속유지하고 있기 때문에 이전에 실행한 특정 상황이후 부터 다시 시작할 수 있다. 아래 샘플 코드를 보면 이해가 쉽다. 패키지를 내부의 프로시져에서 패치를 20개씩만 할 경우, 이전에 실행한 위치를 기억하여 다음 실행위치부터 자동으로 실행된다. create or replace package cur_pkg is cursor c_emp is select employee_id from employees; procedure open; procedure close; procedure printnext_20; end; / create or replace package body cur_pkg is procedure open is begin if not c_emp%isopen the..
054 - [Oracle PL/SQL] Package - Persistent State 해당 세션이 유지되는 동안, 패키지 내부의 변수가 값을 기억하고 있는 것을 의미한다. 아래 샘플코드는 패키지 내부에 변수를 선언하고 해당 변수에 입력받은 값을 저장하는 패키지 이다. 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 에 저장된 값이 세션이 유지되는 동..
053 - [Oracle PL/SQL] Package - Forward Declaration 보통은 선언부에 선언을 먼저하기 때문에 바디에서 정의하는 순서는 문제가 되지 않는다. 아래 샘플은 선언부에 선언하지 않았지만 오류가 발생하지 않는다, 이유는 본문/바디에 정의할때, 호출되는 함수(get_no_work_days)나 패키지를 호출하는 패키지나 함수 앞에 정의했기 때문이다. create or replace package proc_rules_calling is procedure print_emp_details (p_emp_id number); -- function get_no_work_days (p_emp_id number) return number; end; / create or replace package body proc_rules_calling is function get_no_work_..
052 - [Oracle PL/SQL] Package - Overloading (standard package) 기본 패키지도 overloading 가능합니다. to_char 내부함수를 overloading 하는 샘플 create or replace package override is /* we defined to_char function and this function already exist as oracle bulit-in function */ function to_char( p1 number, p2 date ) return varchar2; procedure print; end; / create or replace package body override is function to_char( p1 number, p2 date ) return varchar2 is begin return p1||','||p2; ..
051 - [Oracle PL/SQL] Package - Overloading (functions) 함수에서도 overloading 이 가능합니다. 파라미터의 타입이 다른 샘플입니다. create or replace package overload_funcion is function f1 (p1 number) return number; function f1 (p1 varchar2) return varchar2; end; / create or replace package body overload_funcion is function f1 (p1 number) return number is begin return p1; end; function f1 (p1 varchar2) return varchar2 is begin return 'hi~ '||p1; end; end; select overload_funcio..
050 - [Oracle PL/SQL] Package - Overloading (procedures) 헤더와 바디 부분 샘플 테스트용 테이블을 하나 생성합니다 drop table customer; create table customer (cust_id number, name varchar2(100), birthday date ); 이름이 같은 프로시져를 생성합니다. 다만, 파라미터의 개수가 다릅니다. # case 1 ( 2 procedure differ in number of parameters) create or replace package overload_proc is procedure add_cust(p_id number,p_name varchar2,p_bd date); procedure add_cust(p_id number,p_name varchar2); end; / create or replac..
049 - [Oracle PL/SQL] Package - recompile the package When & Why to recompile the package? # 최초 패키지 create or replace package p_test is c_var1 constant number:=10; c_var2 varchar2(100):='welcome'; procedure print; end; / create or replace package body p_test is c_var3 varchar2(100):='hi there'; procedure print is c_var4 varchar2(100):='hi'; begin dbms_output.put_line('this variable came from package spec. '||c_var1); dbms_output.put_line('this vari..
048 - [Oracle PL/SQL] Package - visibility of components # c_var1/c_var2 can be referenced any place in package body # c_var3 can be referenced any place in package body # c_var4 can be referenced only in print procedure create or replace package p_test is c_var1 constant number:=10; c_var2 varchar2(100):='welcome'; procedure print; end; / create or replace package body p_test is c_var3 varchar2(100):='hi there'; procedure print is c_var4 varchar2(100..