λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“š Database/Oracle

[Oracle] νŒ¨ν‚€μ§€(Package)λž€? (feat. C.R.U.D)

by Fomagran πŸ’» 2022. 3. 5.
728x90
λ°˜μ‘ν˜•

μ•ˆλ…•ν•˜μ„Έμš” Foma πŸ’» μž…λ‹ˆλ‹€!

 

μ˜€λŠ˜μ€ μ—¬λŸ¬ ν•¨μˆ˜μ™€ ν”„λ‘œμ‹œμ €λ₯Ό λ¬Άμ–΄μ„œ μ‚¬μš©ν•  수 μžˆλŠ” νŒ¨ν‚€μ§€μ— λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

λ°”λ‘œ μ‹œμž‘ν• κ²Œμš”~


νŒ¨ν‚€μ§€(Package)λž€?

 

νŒ¨ν‚€μ§€λŠ” ν”„λ‘œμ‹œμ € λ˜λŠ” ν•¨μˆ˜ λ“± μ„œλΈŒ ν”„λ‘œκ·Έλž¨μ„ ν•˜λ‚˜λ‘œ 묢어놓은 κ°μ²΄μž…λ‹ˆλ‹€.

 

예λ₯Ό λ“€λ©΄ μˆ˜ν•™μ— κ΄€ν•œ ν•¨μˆ˜λ“€μ„ λͺ¨μ•„ 놓은 MATHλΌλŠ” νŒ¨ν‚€μ§€κ°€ 있고 κ·Έ μ•ˆμ— 연산을 ν•˜λŠ” ν•¨μˆ˜ λ˜λŠ” ν”„λ‘œμ‹œμ € 등이 μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.

 

νŒ¨ν‚€μ§€λŠ” μ»΄νŒŒμΌμ„ κ±°μ³μ„œ μ‹€ν–‰λ˜λ©°, λ‹€λ₯Έ νŒ¨ν‚€μ§€λ₯Ό μ°Έμ‘°,μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


μž₯점

 

λͺ¨λ“ˆν™”

ν•¨μˆ˜μ™€ ν”„λ‘œμ‹œμ € λ“± μ„œλΈŒ ν”„λ‘œκ·Έλž¨μ„ ν•œ 곳에 λͺ¨μ•„μ„œ μ‚¬μš©ν•  수 μžˆμœΌλ―€λ‘œ 관리 및 μ‚¬μš©ν•˜κΈ°κ°€ μˆ˜μ›”ν•©λ‹ˆλ‹€.

 

μΊ‘μŠν™”

μ„ μ–ΈλΆ€λ§Œ 외뢀에 곡개되고, 본문은 감좰져 있기 λ•Œλ¬Έμ— 접근을 μ œμ–΄ν•˜μ—¬ μ˜€μš©μ„ λ°©μ§€ν•©λ‹ˆλ‹€.

 

μ„±λŠ₯

νŒ¨ν‚€μ§€μ˜ μ„œλΈŒ ν”„λ‘œκ·Έλž¨ 호좜 μ‹œ νŒ¨ν‚€μ§€ 전체가 λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€ λ‹€λ₯Έ μ„œλΈŒ ν”„λ‘œκ·Έλž¨ 호좜 μ‹œ 훨씬 λ‚˜μ€ μ„±λŠ₯을 λ³΄μž…λ‹ˆλ‹€.


νŒ¨ν‚€μ§€ μ„ μ–ΈλΆ€(Package Definition)

 

μ–΄λ–€ ν•¨μˆ˜ λ˜λŠ” ν”„λ‘œμ‹œμ €κ°€ μžˆλŠ”μ§€ μ •μ˜ν•©λ‹ˆλ‹€.

 

ν•¨μˆ˜ OR ν”„λ‘œμ‹œμ €μ˜ 이름, λ§€κ°œλ³€μˆ˜,λ°˜ν™˜λ˜λŠ” νƒ€μž…(ν•¨μˆ˜λΌλ©΄) 등을 μž‘μ„±ν•΄μ€λ‹ˆλ‹€.

 

CREATE OR replace PACKAGE νŒ¨ν‚€μ§€μ΄λ¦„
AS
  FUNCTION ν•¨μˆ˜μ΄λ¦„(
    νŒŒλΌλ―Έν„°1이름 νƒ€μž…,
    νŒŒλΌλ―Έν„°2이름 νƒ€μž…...)
  RETURN νƒ€μž…;
  PROCEDURE ν”„λ‘œμ‹œμ €μ΄λ¦„(
  	νŒŒλΌλ―Έν„°λͺ…1 μž…μΆœλ ₯ νƒ€μž…,
    νŒŒλΌλ―Έν„°λͺ…1 μž…μΆœλ ₯ νƒ€μž…...)
END νŒ¨ν‚€μ§€μ΄λ¦„;

 

TWONUMBER_MATH의 μ„ μ–ΈλΆ€

 

두 개의 숫자λ₯Ό λ°›μ•„ 연산을 ν•΄μ£ΌλŠ” νŒ¨ν‚€μ§€λ₯Ό λ§Œλ“€μ–΄ μ£Όκ² μŠ΅λ‹ˆλ‹€.

 

CREATE OR replace PACKAGE twonumber_math
AS
  FUNCTION Twonumber_sum(
    n1 NUMBER,
    n2 NUMBER)
  RETURN NUMBER;
  FUNCTION Twonumber_minus(
    n1 NUMBER,
    n2 NUMBER)
  RETURN NUMBER;
  FUNCTION Twonumber_multiply(
    n1 NUMBER,
    n2 NUMBER)
  RETURN NUMBER;
  FUNCTION Twonumber_divide(
    n1 NUMBER,
    n2 NUMBER)
  RETURN NUMBER;
END twonumber_math;

νŒ¨ν‚€μ§€ λ³Έλ¬Έ(Package Body)

 

선언문에 μ“΄ ν•¨μˆ˜λ“€μ„ ꡬ체적으둜 μ–΄λ–€ 싀행이 일어날 것인지λ₯Ό μž‘μ„±ν•΄μ€λ‹ˆλ‹€.

 

CREATE OR replace PACKAGE BODY
  νŒ¨ν‚€μ§€μ΄λ¦„
AS
FUNCTION ν•¨μˆ˜μ΄λ¦„( νŒŒλΌλ―Έν„°λͺ…1 νƒ€μž…,
                      νŒŒλΌλ―Έν„°λͺ…2 νƒ€μž…...)
  RETURN νƒ€μž…
IS
  λ³€μˆ˜ μ„ μ–Έ
BEGIN
  μ‹€ν–‰λ¬Έ
  RETURN λ°˜ν™˜κ°’;
END;
PROCEDURE ν”„λ‘œμ‹œμ €μ΄λ¦„( νŒŒλΌλ―Έν„°λͺ…1 μž…μΆœλ ₯νƒ€μž… νƒ€μž…,
                             νŒŒλΌλ―Έν„°λͺ…2 μž…μΆœλ ₯νƒ€μž… νƒ€μž…...)
IS
  λ³€μˆ˜ μ„ μ–Έ
BEGIN
  μ‹€ν–‰λ¬Έ
  RETURN λ°˜ν™˜κ°’;
END;
END νŒ¨ν‚€μ§€μ΄λ¦„;

 

TWONUMBER_MATH의 본문

 

CREATE OR replace PACKAGE BODY twonumber_math
AS
  -- 두 개 숫자λ₯Ό ν•©μ³μ£ΌλŠ” ν•¨μˆ˜
  FUNCTION Twonumber_sum(n1 NUMBER,
                         n2 NUMBER)
  RETURN NUMBER
  IS
    twonum_sum NUMBER := 0;
  BEGIN
      twonum_sum := n1 + n2;

      RETURN twonum_sum;
  END;
  
  -- 두 개 숫자λ₯Ό λΉΌλŠ” ν•¨μˆ˜
  FUNCTION Twonumber_minus(n1 NUMBER,
                           n2 NUMBER)
  RETURN NUMBER
  IS
    twonum_minus NUMBER := 0;
  BEGIN
      twonum_minus := n1 - n2;

      RETURN twonum_minus;
  END;
  
  -- 두 개 숫자λ₯Ό κ³±ν•˜λŠ” ν•¨μˆ˜
  FUNCTION Twonumber_multiply(n1 NUMBER,
                              n2 NUMBER)
  RETURN NUMBER
  IS
    twonum_multiply NUMBER := 0;
  BEGIN
      twonum_multiply := n1 * n2;

      RETURN twonum_multiply;
  END;
  
  -- 두 개 ν•¨μˆ˜λ₯Ό λ‚˜λˆ„λŠ” ν•¨μˆ˜
  FUNCTION Twonumber_divide(n1 NUMBER,
                            n2 NUMBER)
  RETURN NUMBER
  IS
    twonum_divide NUMBER := 0;
  BEGIN
      twonum_divide := n1 / n2;

      RETURN twonum_divide;
  END;
END twonumber_math;

μ‹€ν–‰

 

SELECT νŒ¨ν‚€μ§€μ΄λ¦„.ν•¨μˆ˜(νŒŒλΌλ―Έν„°κ°’)
FROM ν…Œμ΄λΈ”μ΄λ¦„;
--OR
BEGIN
	νŒ¨ν‚€μ§€μ΄λ¦„.ν”„λ‘œμ‹œμ €(νŒŒλΌλ―Έν„°);
END;

 

μœ„μ—μ„œ μž‘μ„±ν•œ 두 숫자λ₯Ό μ—°μ‚°ν•˜λŠ” νŒ¨ν‚€μ§€μΈ TWONUMBER_MATH의 ν•¨μˆ˜λ“€μ„ μ‹€ν–‰ μ‹œμΌœ λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

SELECT TWONUMBER_MATH.TWONUMBER_SUM(3,5) λ‘μˆ«μžλ”ν•˜κΈ°
FROM DUAL;

SELECT TWONUMBER_MATH.TWONUMBER_MINUS(3,5) λ‘μˆ«μžλΉΌκΈ°
FROM DUAL;

SELECT TWONUMBER_MATH.TWONUMBER_MULTIPLY(3,5) λ‘μˆ«μžκ³±ν•˜κΈ°
FROM DUAL;

SELECT TWONUMBER_MATH.TWONUMBER_DIVIDE(3,5) λ‘μˆ«μžλ‚˜λˆ„κΈ°
FROM DUAL;

 

μ•„λž˜μ™€ 같이 λ”ν•˜κ³ ,λΊ΄κ³ ,κ³±ν•˜κ³ ,λ‚˜λˆ„λŠ” 값이 좜λ ₯λ˜λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 


쑰회

 

μ•„λž˜μ™€ 같이 ALL_PROCEDURES둜 κ²€μƒ‰ν•˜λ©΄ ν•¨μˆ˜μ™€ ν”„λ‘œμ‹œμ €κ°€ λͺ¨λ‘ 좜λ ₯λ©λ‹ˆλ‹€.

 

SELECT *
FROM ALL_PROCEDURES
WHERE OBJECT_NAME = 'νŒ¨ν‚€μ§€μ΄λ¦„';

 

TWONUMBER_MATHλ₯Ό μ‘°νšŒν•˜λ©΄

 

SELECT *
FROM ALL_PROCEDURES
WHERE OBJECT_NAME = 'TWONUMBER_MATH';

 

μ•„λž˜μ™€ 같이 TWONUMBER_MATH νŒ¨ν‚€μ§€ λ‚΄ ν•¨μˆ˜λ“€μ΄ 좜λ ₯λ˜λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 


μˆ˜μ •

 

CREATE OR replaceλ₯Ό μ‚¬μš©ν•˜μ—¬ 생성과 λ˜‘κ°™μ΄ ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

 

λ§Œμ•½ νŒ¨ν‚€μ§€κ°€ μžˆλ‹€λ©΄ μˆ˜μ •μ΄ λ˜λ„λ‘ ν•˜κ³ , μ—†λ‹€λ©΄ μƒμ„±λ˜λ„λ‘ ν•©λ‹ˆλ‹€.

 

CREATE OR replace...

μ‚­μ œ

 

DROP PACKAGE νŒ¨ν‚€μ§€μ΄λ¦„;

 

TWONUMBER_MATH νŒ¨ν‚€μ§€λ₯Ό μ‚­μ œν•  λ•Œ μ•„λž˜μ™€ 같이 μž‘μ„±ν•΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€.

 

DROP PACKAGE TWONUMBER_MATH;
728x90
λ°˜μ‘ν˜•

λŒ“κΈ€