TIL 23.09.08

ν™©μ€ν•˜Β·2023λ…„ 9μ›” 8일
0

TIL

λͺ©λ‘ 보기
76/146

πŸ“ŒToday I Learned

였라클(PL/SQL-μ‹€λͺ… ν”„λ‘œμ‹œμ €)

ex30_plsql - μ‹€λͺ… ν”„λ‘œμ‹œμ €(μ €μž₯ ν”„λ‘œμ‹œμ €)

λͺ…λ Ήμ–΄ μ‹€ν–‰ > 처리 κ³Όμ •

1. ANSI-SQL

2. 읡λͺ… ν”„λ‘œμ‹œμ €

a. ν΄λΌμ΄μ–ΈνŠΈ > ꡬ문 μž‘μ„±(select)
b. μ‹€ν–‰(Ctrl + Enter)
c. λͺ…λ Ήμ–΄λ₯Ό 였라클 μ„œλ²„μ— 전달
d. μ„œλ²„κ°€ λͺ…λ Ήμ–΄λ₯Ό μˆ˜μ‹ 
e. ꡬ문 뢄석(νŒŒμ‹±) + 문법 검사
f. 컴파일
g. μ‹€ν–‰(select)
h. κ²°κ³Όμ…‹ λ„μΆœ
i. 결과셋을 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ°˜ν™˜
j. 결과셋을 화면에 좜λ ₯

2.2. λ‹€μ‹œ μ‹€ν–‰ (κ·Έ 사이에 λˆ„κ΅°κ°€κ°€ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μˆ˜μ •ν–ˆλ‹€λ©΄? -> 처음 μ‹€ν–‰κ³Ό κ²°κ³Όκ°€ λ‹¬λΌμ§ˆ 수 μžˆλ‹€.)

  • a ~ j λ‹€μ‹œ 반볡
  • ν•œ 번 μ‹€ν–‰ν–ˆλ˜ λͺ…λ Ήμ–΄λ₯Ό λ‹€μ‹œ μ‹€ν–‰ > μœ„μ˜ λͺ¨λ“  과정을 μ²˜μŒλΆ€ν„° λκΉŒμ§€ λ‹€μ‹œ μ‹€ν–‰ν•œλ‹€.
  • 첫 번째 μ‹€ν–‰ λΉ„μš© = λ‹€μ‹œ μ‹€ν–‰ λΉ„μš©

3. μ‹€λͺ… ν”„λ‘œμ‹œμ €

a. ν΄λΌμ΄μ–ΈνŠΈ > ꡬ문 μž‘μ„±(create)
b. μ‹€ν–‰(Ctrl + Enter)
c. λͺ…λ Ήμ–΄λ₯Ό 였라클 μ„œλ²„μ— 전달
d. μ„œλ²„κ°€ λͺ…λ Ήμ–΄λ₯Ό μˆ˜μ‹ 
e. ꡬ문 뢄석(νŒŒμ‹±) + 문법 검사
f. 컴파일
g. μ‹€ν–‰
h. 였라클 μ„œλ²„ > ν”„λ‘œμ‹œμ € 생성 > μ €μž₯ (create μ†ŒμŠ€ 원본이 μ•„λ‹ˆκ³  컴파일된 기계어λ₯Ό 였라클 HDD에 μ €μž₯ν•œλ‹€.)
i. μ™„λ£Œ

a. ν΄λΌμ΄μ–ΈνŠΈ > ꡬ문 μž‘μ„±(호좜)
b. μ‹€ν–‰(Ctrl + Enter)
c. λͺ…λ Ήμ–΄λ₯Ό 였라클 μ„œλ²„μ— 전달
d. μ„œλ²„κ°€ λͺ…λ Ήμ–΄λ₯Ό μˆ˜μ‹ 
e. ꡬ문 뢄석(νŒŒμ‹±) + 문법 검사
f. 컴파일
g. μ‹€ν–‰ > ν”„λ‘œμ‹œμ € μ‹€ν–‰

3.2 λ‹€μ‹œ μ‹€ν–‰

a. ν΄λΌμ΄μ–ΈνŠΈ > ꡬ문 μž‘μ„±(호좜)
b. μ‹€ν–‰(Ctrl + Enter)
c. λͺ…λ Ήμ–΄λ₯Ό 였라클 μ„œλ²„μ— 전달 -> ν”„λ‘œμ‹œμ €λͺ…λ§Œ λ„˜μ–΄κ° -> λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½ κ°μ†Œ -> 호좜 μ‹œ 컴파일 μ•ˆν•¨.
d. μ„œλ²„κ°€ λͺ…λ Ήμ–΄λ₯Ό μˆ˜μ‹ 
e. ꡬ문 뢄석(νŒŒμ‹±) + 문법 검사
f. 컴파일
g. μ‹€ν–‰ > ν”„λ‘œμ‹œμ € μ‹€ν–‰

ν”„λ‘œμ‹œμ €

  1. 읡λͺ… ν”„λ‘œμ‹œμ €
    - 1회용

  2. μ‹€λͺ… ν”„λ‘œμ‹œμ €

    • μž¬μ‚¬μš©
    • μ˜€λΌν΄μ— μ €μž₯

μ‹€λͺ… ν”„λ‘œμ‹œμ €

  • μ €μž₯ ν”„λ‘œμ‹œμ €(Stored Procedure)
    1. μ €μž₯ ν”„λ‘œμ‹œμ €, Stored Procedure
      - λ§€κ°œλ³€μˆ˜ / λ°˜ν™˜κ°’ ꡬ성 > 자유
    2. μ €μž₯ ν•¨μˆ˜, Stored Function -> μ œμ•½μ΄ μžˆλŠ” ν”„λ‘œμ‹œμ €λ‹€.
      - λ§€κ°œλ³€μˆ˜ / λ°˜ν™˜κ°’ ꡬ성 > ν•„μˆ˜

읡λͺ… ν”„λ‘œμ‹œμ € μ„ μ–Έ

declare
    λ³€μˆ˜ μ„ μ–Έ;
    μ»€μ„œ μ„ μ–Έ;
begin
    κ΅¬ν˜„λΆ€;
exception
    μ˜ˆμ™Έμ²˜λ¦¬;
end;

μ €μž₯ ν”„λ‘œμ‹œμ € μ„ μ–Έ

create [or replace] procedure ν”„λ‘œμ‹œμ €λͺ…  -> 보톡은 or replace μ“΄λ‹€.
is(as)
    [λ³€μˆ˜ μ„ μ–Έ;
     μ»€μ„œ μ„ μ–Έ;]
begin
    κ΅¬ν˜„λΆ€;
[exception
    μ˜ˆμ™Έμ²˜λ¦¬;]
end;

읡λͺ… ν”„λ‘œμ‹œμ €λŠ” μ¦‰μ‹œ μ‹€ν–‰λ˜μ§€λ§Œ, μ €μž₯ ν”„λ‘œμ‹œμ €λŠ” λ¨Όμ € 생성을 ν•œ λ’€ ν˜ΈμΆœμ„ ν•΄μ•Ό μ‹€ν–‰λœλ‹€.
μžλ°”μ˜ λ©”μ†Œλ“œμ™€ λΉ„μŠ·ν•˜λ‹€.
μ €μž₯ ν”„λ‘œμ‹œμ € 생성 = μžλ°” λ©”μ†Œλ“œ 생성
μ €μž₯ ν”„λ‘œμ‹œμ € 호좜 = μžλ°” λ©”μ†Œλ“œ 호좜

μ €μž₯ ν”„λ‘œμ‹œμ € = λ©”μ„œλ“œ
λ§€κ°œλ³€μˆ˜ + λ°˜ν™˜κ°’

  1. λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” ν”„λ‘œμ‹œμ €
create or replace procedure procTest(pnum number) --λ§€κ°œλ³€μˆ˜
is -- λ³€μˆ˜ 선언이 없어도 λ°˜λ“œμ‹œ 기재
    vresult number; -- μΌλ°˜λ³€μˆ˜
begin
    vresult := pnum * 2;
    dbms_output.put_line(vresult);
end procTest;


begin 
    -- PL/SQL μ˜μ—­
    procTest(100);
    procTest(200);
    procTest(300);
end;

ν”„λ‘œμ‹œμ € μž‘μ„±ν•˜λŠ” κ΅¬μ—­μ—λ§Œ PL/SQL만 μ“Έ 수 있고, κ·Έ λ°–μ—λŠ” ANSI-SQL만 μ“Έ 수 μžˆλ‹€.
사싀 κ°€λŠ₯은 ν•˜μ§€λ§Œ λΆˆμ•ˆμ •μ μ΄κΈ° λ•Œλ¬Έμ— μœ„μ˜ μ •μ„λŒ€λ‘œ μ‚¬μš©ν•˜μž.

ν”„λ‘œμ‹œμ € λ§€κ°œλ³€μˆ˜λŠ” 길이와 not null ν‘œν˜„μ€ λΆˆκ°€λŠ₯ν•˜λ‹€. (μ€‘μš”)

λ§€κ°œλ³€μˆ˜ λͺ¨λ“œ
- λ§€κ°œλ³€μˆ˜κ°€ 값을 μ „λ‹¬ν•˜λŠ” 방식
- Call by Value > λ§€κ°œλ³€μˆ˜ > 값을 λ„˜κΈ°λŠ” 방식(κ°’ν˜• 인자)
- Call by Reference > λ§€κ°œλ³€μˆ˜ > μ°Έμ‘°κ°’(μ£Όμ†Œ)을 λ„˜κΈ°λŠ” 방식(μ°Έμ‘°ν˜• 인자)

  1. in λͺ¨λ“œ > κΈ°λ³Έ
  2. out λͺ¨λ“œ
  3. in out λͺ¨λ“œ(X)
create or replace procedure procTest(
    pnum1 in number,    -- in parameter //μΈμžκ°’
    pnum2 in number,
    presult out number,  -- out parameter //λ°˜ν™˜κ°’
    presult2 out number, -- λ°˜ν™˜κ°’
    presult3 out number  -- λ°˜ν™˜κ°’
)
is
begin
    presult := pnum1 + pnum2;
    presult2 := pnum1 - pnum2;
    presult3 := pnum1 * pnum2;
end procTest;


declare
    vnum number;
    vnum2 number;
    vnum3 number;
begin
    procTest(10, 20, vnum, vnum2, vnum3); -- vnum의 μ£Όμ†Œκ°’μ΄ 전달됨. (μ°Έμ‘°κ°’)
    dbms_output.put_line(vnum);
    dbms_output.put_line(vnum2);
    dbms_output.put_line(vnum3);
end;
profile
μ°¨κ·Όμ°¨κ·Ό ν•˜λ‚˜μ”©

0개의 λŒ“κΈ€