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

[Oracle] ν”„λ‘œμ‹œμ €(Procedure)λž€? (feat. C.R.U.D)

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

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

 

μ˜€λŠ˜μ€ μ—¬λŸ¬ μž‘μ—…μ„ ν•œλ²ˆμ— μ‹€ν–‰ν•  수 μžˆλŠ” ν”„λ‘œμ‹œμ €μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

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


ν”„λ‘œμ‹œμ €(Procedure)λž€?

λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ μΌλ ¨μ˜ μž‘업을 μ •λ¦¬ν•œ μ ˆμ°¨λ₯Ό κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ κ΄€λ¦¬ μ‹œμŠ€ν…œμ— μ €μž₯ν•œ κ²ƒμœΌλ‘œ μ˜κ΅¬μ €μž₯λͺ¨λ“ˆ(Persistent Storage Module)이라고도 λΆˆλ¦½λ‹ˆλ‹€.


보톡 μ €μž₯ ν”„λ‘œμ‹œμ €λ₯Ό ν”„λ‘œμ‹œμ €λΌκ³  λΆ€λ₯΄λ©°, 일련의 쿼리λ₯Ό 마치 ν•˜λ‚˜μ˜ ν•¨μˆ˜μ²˜λŸΌ μ‹€ν–‰ν•˜κΈ° μœ„ν•œ 쿼리의 μ§‘ν•©μž…λ‹ˆλ‹€.


즉, νŠΉμ • μž‘업을 μœ„ν•œ μΏΌλ¦¬λ“€μ˜ λΈ”λ‘μž…λ‹ˆλ‹€.

 

(거의 ν•¨μˆ˜μ™€ λΉ„μŠ·ν•©λ‹ˆλ‹€. 차이점은 μ—¬κΈ° μ—μ„œ ν™•μΈν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.)


μž₯점

ν•˜λ‚˜μ˜ μš”μ²­μœΌλ‘œ μ—¬λŸ¬ SQL문을 μ‹€ν–‰μ‹œν‚¬ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. (λ„€νŠΈμ›Œν¬ λΆ€ν•˜λ₯Ό μ€„일 μˆ˜ μžˆμŒ)

λ„€νŠΈμ›Œν¬ μ†Œμš” μ‹œκ°„을 μ€„μ—¬ μ„±λŠ₯을 κ°œμ„ ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

μ—¬λŸ¬ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό κ³΅μœ κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€. (API처럼 μ œκ³΅κ°€λŠ₯)

κΈ°λŠ₯ λ³€κ²½μ΄ νŽΈν•©λ‹ˆλ‹€. (νŠΉμ • κΈ°λŠ₯을 λ³€κ²½ν•  λ•Œ ν”„λ‘œμ‹œμ €λ§Œ λ³€κ²½ν•˜λ©΄ λ¨)

단점

λ¬Έμžλ‚˜ μˆ«μžμ—΄ μ—°μ‚°μ— μ‚¬μš©ν•˜λ©΄ μ˜€νžˆλ € C,Java보닀 λŠλ¦° μ„±λŠ₯을 λ³΄μΌ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ ΅μŠ΅λ‹ˆλ‹€.(ν”„λ‘œμ‹œμ Έκ°€ μ•±μ˜ μ–΄λ””에 μ‚¬μš©λ˜λŠ”지 ν™•μΈμ΄ μ–΄λ €μ›€)


생성

 

CREATE OR REPLACE PROCEDURE ν”„λ‘œμ‹œμ Έμ΄λ¦„ (νŒŒλΌλ―Έν„°1,νŒŒλΌλ―Έν„°2...);

IS
λ³€μˆ˜

BEGIN

쿼리문

END ν”„λ‘œμ‹œμ Έ 이름;

 

μ†Œν™˜μ‚¬μ˜ ν‹°μ–΄λ₯Ό μ•Œμ•„λ‚΄λŠ” ν”„λ‘œμ‹œμ €

 

CREATE OR REPLACE PROCEDURE GET_TIER(in_name IN VARCHAR2,out_tier OUT VARCHAR2)

IS

BEGIN
	
    SELECT TIER INTO out_tier FROM SUMMONER_TB WHERE NAME = in_name;

EXCEPTION
  --μ†Œν™˜μ‚¬λ₯Ό 찾을 수 없을 λ•Œ
  WEHN NO_DATA_FOUND THEN
  
    out_tier:='NO_SUMMONER_FOUND';

END GET_TIER;

 

νŒŒλΌλ―Έν„° κ°’은 in,out,inout으둜 μ΄ μ„Έκ°€μ§€ μ’…λ₯˜λ‘œ μž‘μ„±ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

λ¨Όμ € in은 전달될 데이터이고, out은 결과둜 λ‚˜κ°ˆ 데이터, in out inκ³Ό out λͺ¨λ‘ κ°€λŠ₯ν•œ 데이터λ₯Ό λœ»ν•©λ‹ˆλ‹€.

 

μ•„λž˜μ™€ 같이 ν”„λ‘œμ‹œμ €κ°€ μƒμ„±λœ κ±Έ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 


쑰회

 

DECLARE
좜λ ₯될 λ³€μˆ˜ μ„ μ–Έ
μ‹€ν–‰ν•  ν”„λ‘œμ‹œμ €
좜λ ₯λ¬Έ(Optional)
END

 

faker의 ν‹°μ–΄λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œμ‹œμ €

 

DECLARE
out_tier VARCHAR2(10);
BEGIN get_tier('faker',out_tier);
DBMS_OUTPUT.PUT_LINE(out_tier);
END;

-- C1

μˆ˜μ •

 

μˆ˜μ •μ€ create or replace ꡬ문을 μ‚¬μš©ν•˜λ©΄ ν•΄λ‹Ή ν”„λ‘œμ‹œμ €λͺ…이 μžˆλ‹€λ©΄ μˆ˜μ •, μ—†λ‹€λ©΄ μƒμ„±λ˜κ²Œ λ©λ‹ˆλ‹€.

 

CREATE OR REPLACE PROCEDURE GET_TIER(in_name IN VARCHAR2,out_tier OUT VARCHAR2)

IS

BEGIN
	
    SELECT NAME INTO out_tier FROM SUMMONER_TB WHERE NAME = in_name;

EXCEPTION

  WHEN NO_DATA_FOUND THEN

    out_tier:='NO_DATA_FOUND';

END get_tier;

μ‚­μ œ

 

DROP PROCEDURE ν”„λ‘œμ‹œμ €λͺ…;

 

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

 

DROP PROCEDURE GET_TIER;
728x90
λ°˜μ‘ν˜•

λŒ“κΈ€