PL/SQL - 기본 문법

안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 PL/SQL의 흥미로운 세계로 뛰어들어 볼 거예요. 코드를 한 줄도 적어본 적이 없으시다고 걱정하지 마세요 - 우리는 기본부터 시작하여 단계별로 지식을 쌓아 나갈 거예요. 이 튜토리얼의 끝까지 따라오시면, 여러분은 자신감 있게 첫 PL/SQL 프로그램을 작성할 수 있을 거예요!

PL/SQL - Basic Syntax

'Hello World' 예제

우리는 전통적인 "Hello World" 프로그램으로 시작해 보겠습니다. 모든 프로그래머가 거쳐야 하는 관문이며, PL/SQL 문법에 대해 손을 대보는 좋은 방법입니다.

BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, World!');
END;
/

이것을 해부해 보겠습니다:

  1. BEGIN: 이 키워드는 우리의 PL/SQL 블록의 시작을 나타냅니다.
  2. DBMS_OUTPUT.PUT_LINE('Hello, World!');: 이 줄은 우리의 메시지를 인쇄합니다. 이를 PL/SQL이 우리에게 말하는 방식으로 생각해 보세요.
  3. END;: 이는 우리의 PL/SQL 블록의 끝을 나타냅니다.
  4. /: 이 역 슬래시는 SQL*Plus가 PL/SQL 블록을 실행하도록 합니다.

이 코드를 실행하면 화면에 "Hello, World!"가 인쇄됩니다. 축하합니다! 여러분은 첫 PL/SQL 프로그램을 작성했습니다.

PL/SQL 식별자

식별자는 변수, 프로시저, 함수와 같은 다양한 프로그램 요소에 부여하는 이름입니다. 이는 우리 코드의 다른 부분을 구분하는 이름표와 같습니다. 식별자를 만들 때의 규칙은 다음과 같습니다:

  1. 첫 글자는 대문자나 소문자로 시작해야 합니다 (A-Z 또는 a-z).
  2. 대문자, 소문자, 숫자(0-9), 달러 기호($), 밑줄(_), 또는 파운드 기호(#)로 이어질 수 있습니다.
  3. 30자 이상이 되지 않아야 합니다.
  4. 예약어(BEGIN, END, IF 등)가 될 수 없습니다.

다음은 몇 가지 예제를 보여드리겠습니다:

DECLARE
employee_name VARCHAR2(50);
salary NUMBER;
dept_id NUMBER(5);
BEGIN
-- 코드는 여기에 들어갑니다
END;
/

이 예제에서 employee_name, salary, dept_id는 모두 유효한 식별자입니다.

PL/SQL 구분자

구분자는 PL/SQL에서 특정 의미를 가지는 특수 문자나 기호입니다. 이는 문장의 구분符처럼 코드의 다른 부분을 구조화하고 분리하는 데 도움이 됩니다.

다음은 일반적인 PL/SQL 구분자 표입니다:

구분자 설명
; 문장 종료자
% 속성 지시자
. 구성 요소 선택자
( ) 매개변수 목록을 감싸는 것
, 매개변수 분리자
:= 할당 연산자
=> 연관 연산자
-- 단일 줄 주석 지시자
/ / 다중 줄 주석 지시자

다음은 몇 가지를 실제로 사용해 보겠습니다:

DECLARE
v_count NUMBER := 0; -- 할당 연산자
v_name VARCHAR2(50) := 'John Doe';
BEGIN
v_count := v_count + 1; -- 문장 종료자
DBMS_OUTPUT.PUT_LINE('Name: ' || v_name); -- 구성 요소 선택자
END;
/

PL/SQL 주석

주석은 코드에 붙인 스티커와 같습니다. 컴파일러는 주석을 무시하지만, 코드가 무엇을 하는지 설명하는 데 매우 유용할 수 있습니다. PL/SQL에는 두 가지 유형의 주석이 있습니다:

  1. 단일 줄 주석: --로 시작합니다.
  2. 다중 줄 주석: /**/ 사이에 들어 있습니다.

다음은 예제입니다:

DECLARE
-- 이것은 단일 줄 주석입니다
v_pi NUMBER := 3.14159;
BEGIN
/*
이것은 다중 줄 주석입니다.
여러 줄을跨할 수 있습니다.
더 긴 설명에 매우 유용합니다.
*/
DBMS_OUTPUT.PUT_LINE('pi의 값은: ' || v_pi);
END;
/

PL/SQL 프로그램 단위

PL/SQL 프로그램 단위는 PL/SQL 애플리케이션의 구성 요소입니다. 이는 책의 레시피와 같아 - 각각의 레시피는 특정 작업을 수행하는 방법을 설명합니다. 주요 유형은 다음과 같습니다:

  1. 익명 블록
  2. 프로시저
  3. 함수
  4. 패키지

각각의 예제를 보여드리겠습니다:

1. 익명 블록

우리는 "Hello World" 예제에서 이미 이를 보았습니다. 데이터베이스에 저장되지 않는 코드 블록입니다.

BEGIN
DBMS_OUTPUT.PUT_LINE('이것은 익명 블록입니다');
END;
/

2. 프로시저

프로시저는 특정 작업을 수행하는 명명된 PL/SQL 블록입니다.

CREATE OR REPLACE PROCEDURE greet_user(p_name IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('안녕하세요, ' || p_name || '!');
END;
/

-- 프로시저 호출:
BEGIN
greet_user('Alice');
END;
/

3. 함수

함수는 프로시저와 유사하지만, 값을 반환합니다.

CREATE OR REPLACE FUNCTION calculate_area(p_radius IN NUMBER)
RETURN NUMBER IS
v_pi CONSTANT NUMBER := 3.14159;
BEGIN
RETURN v_pi * p_radius * p_radius;
END;
/

-- 함수 사용:
DECLARE
v_area NUMBER;
BEGIN
v_area := calculate_area(5);
DBMS_OUTPUT.PUT_LINE('면적은: ' || v_area);
END;
/

4. 패키지

패키지는 관련된 프로시저, 함수, 변수, 그리고 다른 PL/SQL 객체의 모음입니다.

CREATE OR REPLACE PACKAGE math_operations AS
FUNCTION add_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER;
FUNCTION subtract_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER;
END math_operations;
/

CREATE OR REPLACE PACKAGE BODY math_operations AS
FUNCTION add_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN a + b;
END add_numbers;

FUNCTION subtract_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN a - b;
END subtract_numbers;
END math_operations;
/

-- 패키지 사용:
DECLARE
v_result NUMBER;
BEGIN
v_result := math_operations.add_numbers(10, 5);
DBMS_OUTPUT.PUT_LINE('10 + 5 = ' || v_result);

v_result := math_operations.subtract_numbers(10, 5);
DBMS_OUTPUT.PUT_LINE('10 - 5 = ' || v_result);
END;
/

이제 여러분은 PL/SQL의 기본 문법을 다루었고, 간단한 "Hello World" 프로그램에서 복잡한 구조인 패키지까지 이해하셨습니다. 프로그래밍을 배우는 것은 새로운 언어를 배우는 것과 같아 - 연습과 인내가 필요합니다. 코드 예제를 실험하고, 수정하고, 무엇이 일어나는지 확인해 보세요. 그게 이 개념을 진정으로 이해하고 PL/SQL 프로그래머로 성장하는 길입니다.

행복하게 코딩하세요, 여러분의 쿼리가 항상 기대하는 결과를 반환하길 바랍니다!

Credits: Image by storyset