PL/SQL과 JAVA를 비교하자

최고고·2025년 1월 14일
0
  • PL/SQL : 데이터베이스 중심 작업에 최적화, SQL 문을 절차적처리

  • Java : 범용 프로그래밍에 적합, 객체지향언어

1. 변수 선언

  • PL/SQL

    - DECLARE 섹션 또는 BEGIN 블록 안에서 변수선언
    - 데이터베이스 중심의 데이터 타입(VARCHAR2, NUMBER, DATE)을 사용
DECLARE
    v_name VARCHAR2(50);  -- 문자열 변수
    v_age NUMBER(3);      -- 숫자 변수
    v_date DATE;          -- 날짜 변수
BEGIN
    v_name := 'Alice';
    v_age := 25;
    v_date := SYSDATE;
END;
  • Java

    - 변수를 클래스 또는 메서드 안에서 선언
    - Java 언어 데이터 타입(int, double, String, boolean)을 사용
public class Main {
    public static void main(String[] args) {
        String name = "Alice"; // 문자열 변수
        int age = 25;          // 정수 변수
        double salary = 5000.50; // 실수 변수
    }
}

2. 데이터 타입

  • PL/SQL

  1. 주로 데이터베이스 중심의 데이터 타입 사용
    - 문자열: VARCHAR2, CHAR, CLOB
    - 숫자: NUMBER, INTEGER
    - 날짜: DATE, TIMESTAMP
    - 참/거짓: BOOLEAN (PL/SQL 전용)
DECLARE
    v_flag BOOLEAN := TRUE;
    v_price NUMBER(8,2);
BEGIN
    IF v_flag THEN
        v_price := 19.99;
    END IF;
END;
  • Java

  1. 원시 데이터 타입(Primitive types)과 참조 데이터 타입(Reference types)을 제공
    - 문자열: String
    - 숫자: int, float, double
    - 날짜: LocalDate, Date
    - 참/거짓: boolean
boolean flag = true;
double price = 19.99;

3. 변수 초기화

  • PL/SQL

    - 변수를 선언 시 초기화하거나 나중에 값을 할당할 수 있음
    - 초기값 없이 선언하면 NULL로 초기화됨
DECLARE
    v_number NUMBER := 10; -- 초기화
    v_string VARCHAR2(50); -- 초기화 없이 선언 (NULL)
BEGIN
    v_string := 'Hello';
END;
  • Java

    - 지역 변수(Local variables)는 반드시 초기화해야 사용할 수 있음
    - 클래스 멤버 변수는 초기화하지 않으면 기본값(숫자는 0, 참조 타입은 null)으로 설정
public class Main {
    static int classVar; // 기본값 0
    public static void main(String[] args) {
        int localVar; // 초기화 필요
        localVar = 10;
        System.out.println(localVar);
    }
}

4. 변수 스코프(Scope)

  • PL/SQL

    - 변수는 선언된 블록 내에서만 유효
    - 블록 안에서 선언된 변수는 외부에서 접근할 수 없음
DECLARE
    v_outer NUMBER := 10;
BEGIN
    DECLARE
        v_inner NUMBER := 20;
    BEGIN
        -- v_inner와 v_outer 사용 가능
        DBMS_OUTPUT.PUT_LINE(v_outer + v_inner);
    END;
    -- v_inner는 이 블록에서 사용 불가
END;
  • Java

    - 클래스 멤버 변수(전역 변수), 메서드 변수(지역 변수), 매개 변수의 스코프가 구분됨
    - 블록 {} 안에서 선언된 변수는 블록 밖에서 접근할 수 없음
public class Main {
    static int globalVar = 10; // 클래스 멤버 변수

    public static void main(String[] args) {
        int localVar = 20; // 메서드 변수
        {
            int innerVar = 30; // 블록 변수
            System.out.println(localVar + innerVar);
        }
        // innerVar는 여기서 접근 불가
    }
}

5. 상수(Constant)

  • PL/SQL

    - CONSTANT 키워드를 사용하여 상수를 선언
    - 상수는 초기화 후 변경할 수 없음
DECLARE
    v_pi CONSTANT NUMBER := 3.14159;
BEGIN
    -- v_pi := 3.2; -- 오류 발생
END;
  • Java

    - final 키워드를 사용하여 상수를 선언
    - 선언과 동시에 초기화해야 하며 값 변경이 불가능
public class Main {
    public static final double PI = 3.14159;
    public static void main(String[] args) {
        // PI = 3.2; // 오류 발생
    }
}

6. 참조(Reference)

  • PL/SQL

    - PL/SQL은 데이터베이스 컬럼과 변수를 연관시킬수 있음
    - %TYPE 또는 %ROWTYPE 키워드를 사용
DECLARE
    v_name employees.name%TYPE;
BEGIN
    SELECT name INTO v_name FROM employees WHERE id = 1;
END;
  • Java

    - Java에서는 객체의 참조 변수와 원시 타입 변수를 구분
String name = "Alice"; // 참조 변수
int id = 1;            // 원시 타입 변수

7. 요약

PL/SQLJava
데이터타입데이터베이스 중심(VARCHAR2, NUMBER, 등)언어 중심(int, String, boolean)
초기화초기화 없이 선언 가능 (기본값: NULL)초기화 필수 (지역 변수)
스코프블록 기반클래스/메서드/블록 기반
상수CONSTANT 키워드 사용키워드 사용
참조%TYPE, %ROWTYPE 키워드 제공참조 및 원시 타입 구분

0개의 댓글