λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

였라클 λ³€μˆ˜ 및 μƒμˆ˜ μ„ μ–Έ 및 μ‚¬μš©λ²• (PL/SQL)

by 5566 2023. 10. 30.

κ°œμš”

λ³€μˆ˜μ™€ μƒμˆ˜λŠ” ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 데이터λ₯Ό μ €μž₯ν•˜κ³  μ²˜λ¦¬ν•˜λŠ” μ€‘μš”ν•œ μš”μ†Œμž…λ‹ˆλ‹€. 였라클 PL/SQLμ—μ„œλ„ λ³€μˆ˜μ™€ μƒμˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ‚¬μš©ν•  수 있으며, 이λ₯Ό 톡해 λ°μ΄ν„°μ˜ 가곡과 연산을 효율적으둜 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 글은 였라클 PL/SQLμ—μ„œ λ³€μˆ˜μ™€ μƒμˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 방법뢀터 μ΄ˆκΈ°ν™” 및 ν• λ‹Ήν•˜λŠ” 방법, 그리고 μ‚¬μš© μ‹œ μ£Όμ˜μ‚¬ν•­κ³Ό μ‹€μ œ μ˜ˆμ‹œλ₯Ό 톡해 λ³€μˆ˜μ™€ μƒμˆ˜μ˜ ν™œμš©λ²•μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ 이 κΈ€μ˜ κ΅¬μ„±μž…λ‹ˆλ‹€.

  1. λ³€μˆ˜μ™€ μƒμˆ˜μ˜ μ„ μ–Έ
  2. λ³€μˆ˜μ™€ μƒμˆ˜μ˜ μ΄ˆκΈ°ν™” 및 ν• λ‹Ή
  3. λ³€μˆ˜μ™€ μƒμˆ˜ μ‚¬μš© μ‹œ μ£Όμ˜μ‚¬ν•­
  4. λ³€μˆ˜μ™€ μƒμˆ˜μ˜ ν™œμš© μ˜ˆμ‹œ

이제 각 ν•­λͺ©λ³„λ‘œ μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ³€μˆ˜μ™€ μƒμˆ˜μ˜ μ„ μ–Έ

λ³€μˆ˜μ™€ μƒμˆ˜λŠ” 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€. λ³€μˆ˜λŠ” 값을 λ³€κ²½ν•  수 μžˆλŠ” 곡간이며, μƒμˆ˜λŠ” ν•œ 번 정해진 값을 λ³€κ²½ν•  수 μ—†λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.

λ³€μˆ˜μ˜ μ„ μ–Έ

λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 ν˜•μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

λ³€μˆ˜λͺ… λ°μ΄ν„°νƒ€μž…;

예λ₯Ό λ“€μ–΄, μ •μˆ˜ν˜• λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

num INT;

μƒμˆ˜μ˜ μ„ μ–Έ

μƒμˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 ν˜•μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

μƒμˆ˜λͺ… CONSTANT λ°μ΄ν„°νƒ€μž… := μ΄ˆκΈ°κ°’;

예λ₯Ό λ“€μ–΄, λ¬Έμžμ—΄ μƒμˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ΄ˆκΈ°κ°’μ„ "Hello"둜 μ„€μ •ν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

message CONSTANT VARCHAR2(10) := 'Hello';

μ—¬κΈ°μ„œ CONSTANT ν‚€μ›Œλ“œλŠ” 이 λ³€μˆ˜κ°€ μƒμˆ˜μž„μ„ λͺ…μ‹œν•΄μ£ΌλŠ” 역할을 ν•©λ‹ˆλ‹€. μƒμˆ˜λŠ” ν•œ 번 μ„ μ–Έν•˜λ©΄ 값을 λ³€κ²½ν•  수 μ—†κΈ° λ•Œλ¬Έμ— μ΄ˆκΈ°κ°’μ„ λ°˜λ“œμ‹œ μ„€μ •ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ³€μˆ˜μ™€ μƒμˆ˜λŠ” μ„ μ–Έλœ 이후에 μ‚¬μš©λ  λ•Œ 값을 ν• λ‹Ήν•˜κ²Œ λ©λ‹ˆλ‹€. λ‹€μŒ λ‹¨λ½μ—μ„œ λ³€μˆ˜μ™€ μƒμˆ˜μ˜ μ΄ˆκΈ°ν™” 및 ν• λ‹Ή 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ³€μˆ˜μ™€ μƒμˆ˜μ˜ μ΄ˆκΈ°ν™” 및 ν• λ‹Ή

λ³€μˆ˜μ™€ μƒμˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ΄ˆκΈ°ν™” 및 ν• λ‹Ή 과정을 거쳐야 ν•©λ‹ˆλ‹€. μ΄ˆκΈ°ν™”λŠ” λ³€μˆ˜λ‚˜ μƒμˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ 값을 μ§€μ •ν•˜λŠ” 것을 μ˜λ―Έν•˜λ©°, 할당은 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 λ³€μˆ˜λ‚˜ μƒμˆ˜μ— 값을 λŒ€μž…ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™” 및 ν• λ‹Ή

λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ„ μ–Έκ³Ό λ™μ‹œμ— 값을 지정해주면 λ©λ‹ˆλ‹€. λ‹€μŒμ€ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ΄ˆκΈ°κ°’μ„ ν• λ‹Ήν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€.

num INT := 10;

λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜κΈ° μœ„ν•΄μ„œλŠ” λŒ€μž… μ—°μ‚°μž :=λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λ‹€μŒμ€ λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€.

num := 20;

λ³€μˆ˜λŠ” μ—¬λŸ¬ λ²ˆμ— κ±Έμ³μ„œ 값을 λ³€κ²½ν•  수 μžˆμœΌλ―€λ‘œ, ν•„μš”μ— λ”°λΌμ„œ μ—¬λŸ¬ 번 ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μƒμˆ˜μ˜ μ΄ˆκΈ°ν™” 및 ν• λ‹Ή

μƒμˆ˜λŠ” μ„ μ–Έν•  λ•Œ λ°˜λ“œμ‹œ μ΄ˆκΈ°κ°’μ„ 지정해야 ν•©λ‹ˆλ‹€. μƒμˆ˜λŠ” μ΄ˆκΈ°ν™” μ΄ν›„μ—λŠ” 값을 λ³€κ²½ν•  수 μ—†μœΌλ―€λ‘œ, λ³€μˆ˜μ™€λŠ” 달리 ν• λ‹Ήν•  수 μžˆλŠ” 과정이 μ—†μŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ μƒμˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ΄ˆκΈ°κ°’μ„ ν• λ‹Ήν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€.

message CONSTANT VARCHAR2(10) := 'Hello';

μƒμˆ˜μ˜ μ΄ˆκΈ°κ°’μ€ μ„ μ–Έν•  λ•Œ ν•œ 번만 지정할 수 μžˆμŠ΅λ‹ˆλ‹€. 이후에 값을 λ³€κ²½ν•˜λ €κ³  ν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

μœ„μ˜ λ‚΄μš©μ„ 톡해 λ³€μˆ˜μ™€ μƒμˆ˜μ˜ μ΄ˆκΈ°ν™” 및 ν• λ‹Ή 방법을 μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ³€μˆ˜μ™€ μƒμˆ˜ μ‚¬μš© μ‹œ μ£Όμ˜ν•΄μ•Ό ν•  점도 μžˆμœΌλ―€λ‘œ, λ‹€μŒ λ‹¨λ½μ—μ„œ 이에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ³€μˆ˜μ™€ μƒμˆ˜ μ‚¬μš© μ‹œ μ£Όμ˜μ‚¬ν•­

λ³€μˆ˜μ™€ μƒμˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•Œ μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ‚¬μš©ν•  λ•Œ λͺ‡ 가지 μ£Όμ˜μ‚¬ν•­μ΄ μžˆμœΌλ―€λ‘œ, μ•„λž˜μ˜ λ‚΄μš©μ„ μ°Έκ³ ν•΄ μ£Όμ„Έμš”.

λ³€μˆ˜ μ‚¬μš© μ‹œ μ£Όμ˜μ‚¬ν•­

  1. λ³€μˆ˜λŠ” μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ μƒνƒœλ‘œ μ‚¬μš©λ˜λ©΄ μ˜ˆμƒμΉ˜ λͺ»ν•œ λ™μž‘μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•œ ν›„, μ΄ˆκΈ°ν™”ν•˜λŠ” μŠ΅κ΄€μ„ κ°€μ§€μ„Έμš”.

  2. λ³€μˆ˜μ— μ μ ˆν•œ 데이터 νƒ€μž…μ„ μ§€μ •ν•˜μ„Έμš”. 데이터 νƒ€μž…μ΄ μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” 값을 ν• λ‹Ήν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  3. λΆˆν•„μš”ν•œ λ³€μˆ˜λ₯Ό μƒμ„±ν•˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•˜μ„Έμš”. ν•„μš”ν•œ λ³€μˆ˜λ§Œ μ„ μ–Έν•˜μ—¬ λ©”λͺ¨λ¦¬λ₯Ό μ ˆμ•½ν•˜κ³  μ½”λ“œμ˜ 가독성을 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

μƒμˆ˜ μ‚¬μš© μ‹œ μ£Όμ˜μ‚¬ν•­

  1. μƒμˆ˜λŠ” 값을 λ³€κ²½ν•  수 μ—†κΈ° λ•Œλ¬Έμ—, μ„ μ–Έν•  λ•Œ μ‹ μ€‘ν•˜κ²Œ κ²°μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. 변경이 ν•„μš”ν•œ 경우 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  2. μƒμˆ˜μ˜ 이름은 λŒ€λ¬Έμžμ™€ μ–Έλ”μŠ€μ½”μ–΄(_)λ₯Ό μ‚¬μš©ν•˜μ—¬ 읽기 μ‰½κ²Œ μž‘μ„±ν•˜μ„Έμš”. 예λ₯Ό λ“€μ–΄, MAX_VALUE와 같이 λͺ…ν™•ν•œ 이름을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  3. μƒμˆ˜μ—λŠ” 가급적이면 λ¦¬ν„°λŸ΄ 값을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ λ³€μˆ˜λ‚˜ μƒμˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 μ˜λ„ν•˜μ§€ μ•Šμ€ κ²°κ³Όκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ£Όμ˜μ‚¬ν•­μ„ 톡해 λ³€μˆ˜μ™€ μƒμˆ˜λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 λ³€μˆ˜μ™€ μƒμˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ μ‹€μ œλ‘œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ³€μˆ˜μ™€ μƒμˆ˜μ˜ ν™œμš© μ˜ˆμ‹œ

λ³€μˆ˜μ™€ μƒμˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•Œ μ€‘μš”ν•œ μš”μ†Œλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€. λ‹€μŒμ€ λ³€μˆ˜μ™€ μƒμˆ˜μ˜ μ‹€μ œ ν™œμš© μ˜ˆμ‹œμž…λ‹ˆλ‹€.

λ³€μˆ˜μ˜ ν™œμš© μ˜ˆμ‹œ

DECLARE
  num1 INT := 10;
  num2 INT := 5;
  result INT;
BEGIN
  result := num1 + num2;
  DBMS_OUTPUT.PUT_LINE('λ§μ…ˆ κ²°κ³Ό: ' || result);

  num1 := num1 * 2;
  num2 := num2 + 3;
  result := num1 - num2;
  DBMS_OUTPUT.PUT_LINE('λΊ„μ…ˆ κ²°κ³Ό: ' || result);
END;

μœ„ μ˜ˆμ‹œμ—μ„œ num1κ³Ό num2 λ³€μˆ˜λŠ” μ΄ˆκΈ°κ°’μœΌλ‘œ 각각 10κ³Ό 5λ₯Ό ν• λ‹Ήλ°›κ³ , result λ³€μˆ˜λŠ” 값을 할당받지 μ•Šμ€ μƒνƒœμž…λ‹ˆλ‹€. 첫 번째 resultμ—λŠ” num1κ³Ό num2λ₯Ό λ”ν•œ 값을 ν• λ‹Ήν•˜κ³ , 두 번째 resultμ—λŠ” num1μ—μ„œ num2λ₯Ό λΊ€ 값을 ν• λ‹Ήν•©λ‹ˆλ‹€. κ²°κ³ΌλŠ” DBMS_OUTPUT.PUT_LINE ν•¨μˆ˜λ₯Ό 톡해 좜λ ₯λ©λ‹ˆλ‹€.

μƒμˆ˜μ˜ ν™œμš© μ˜ˆμ‹œ

DECLARE
  PI CONSTANT NUMBER := 3.141592;
  radius NUMBER := 5;
  area NUMBER;
BEGIN
  area := PI * radius * radius;
  DBMS_OUTPUT.PUT_LINE('μ›μ˜ 넓이: ' || area);

  radius := 10;
  area := PI * radius * radius;
  DBMS_OUTPUT.PUT_LINE('λ°˜μ§€λ¦„μ΄ 10인 μ›μ˜ 넓이: ' || area);
END;

μœ„ μ˜ˆμ‹œμ—μ„œ PI μƒμˆ˜λŠ” μ›μ£Όμœ¨ 값을 가지고 있으며, radius λ³€μˆ˜λŠ” μ›μ˜ λ°˜μ§€λ¦„μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 첫 번째 areaμ—λŠ” μ›μ˜ 넓이λ₯Ό κ³„μ‚°ν•˜μ—¬ ν• λ‹Ήν•˜κ³ , 두 번째 areaμ—λŠ” radius의 값이 10으둜 λ³€κ²½λœ 후에 λ‹€μ‹œ μ›μ˜ 넓이λ₯Ό κ³„μ‚°ν•˜μ—¬ ν• λ‹Ήν•©λ‹ˆλ‹€. κ²°κ³ΌλŠ” DBMS_OUTPUT.PUT_LINE ν•¨μˆ˜λ₯Ό 톡해 좜λ ₯λ©λ‹ˆλ‹€.

λ³€μˆ˜μ™€ μƒμˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ μœ μ—°ν•˜κ³  λ‹€μ–‘ν•œ 값을 λ‹€λ£¨λŠ” 데 μ‚¬μš©λ˜λ©°, μœ„μ˜ μ˜ˆμ‹œμ²˜λŸΌ λ‹€μ–‘ν•œ μ—°μ‚°κ³Ό 계산에 ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ˜ˆμ‹œλ₯Ό 톡해 λ³€μˆ˜μ™€ μƒμˆ˜μ˜ ν™œμš©λ²•μ„ 읡히고, μ‹€μ œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄λ³΄μ„Έμš”.

λŒ“κΈ€