[C# PL/SQL] 5.C#과 오라클 프로시저를 이용한 CRUD 연산 구현, 각 연산에 대한 프로시저 작성 및 C# 코드 예제.

이번 글에서는 C#과 Oracle PL/SQL을 사용하여 데이터베이스에서 CRUD(Create, Read, Update, Delete) 연산을 수행하는 방법에 대해 다루겠습니다. CRUD 연산은 세 가지 주요 요소로 구성됩니다: 데이터베이스에서의 데이터 생성, 읽기, 수정, 삭제입니다. 이 연산들은 데이터베이스 관리 시스템(DBMS)에서 매우 기본적이고 중요한 작업입니다. 특히, 대량의 데이터를 효과적으로 관리하고 조작하기 위해 프로시저를 사용하는 것은 매우 유용할 수 있습니다.

1. CRUD 연산의 개요

CRUD 연산은 데이터베이스에서 발생하는 네 가지 기본적인 작업을 설명합니다. 아래의 간단한 설명을 통해 각 연산의 개념을 살펴보겠습니다.

  • Create: 새로운 데이터 레코드를 생성합니다.
  • Read: 데이터베이스에서 데이터를 조회합니다.
  • Update: 기존 데이터 레코드를 수정합니다.
  • Delete: 데이터 레코드를 삭제합니다.

2. 데이터베이스 테이블 설계

CRUD 연산을 구현하기 위해, 먼저 사용할 간단한 데이터베이스 테이블을 설계하겠습니다. 예를 들어, 학생 정보를 저장하는 `Students`라는 테이블을 생성합니다.

CREATE TABLE Students (
    ID NUMBER GENERATED BY DEFAULT AS IDENTITY,
    Name VARCHAR2(50),
    Age NUMBER,
    Major VARCHAR2(50),
    PRIMARY KEY (ID)
);

3. Oracle PL/SQL 프로시저 작성

이제 각 CRUD 연산에 대해 Oracle PL/SQL 프로시저를 작성합니다.

3.1 Create – 학생 추가 프로시저

CREATE OR REPLACE PROCEDURE CreateStudent (
    p_Name IN VARCHAR2,
    p_Age IN NUMBER,
    p_Major IN VARCHAR2
) AS
BEGIN
    INSERT INTO Students (Name, Age, Major)
    VALUES (p_Name, p_Age, p_Major);
    COMMIT;
END CreateStudent;

3.2 Read – 학생 조회 프로시저

CREATE OR REPLACE PROCEDURE ReadStudent (
    p_ID IN NUMBER,
    p_Name OUT VARCHAR2,
    p_Age OUT NUMBER,
    p_Major OUT VARCHAR2
) AS
BEGIN
    SELECT Name, Age, Major INTO p_Name, p_Age, p_Major
    FROM Students
    WHERE ID = p_ID;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        p_Name := 'No Data Found';
        p_Age := NULL;
        p_Major := NULL;
END ReadStudent;

3.3 Update – 학생 정보 수정 프로시저

CREATE OR REPLACE PROCEDURE UpdateStudent (
    p_ID IN NUMBER,
    p_Name IN VARCHAR2,
    p_Age IN NUMBER,
    p_Major IN VARCHAR2
) AS
BEGIN
    UPDATE Students
    SET Name = p_Name,
        Age = p_Age,
        Major = p_Major
    WHERE ID = p_ID;
    COMMIT;
END UpdateStudent;

3.4 Delete – 학생 삭제 프로시저

CREATE OR REPLACE PROCEDURE DeleteStudent (
    p_ID IN NUMBER
) AS
BEGIN
    DELETE FROM Students
    WHERE ID = p_ID;
    COMMIT;
END DeleteStudent;

4. C#에서 Oracle 프로시저 호출하기

C# 애플리케이션에서 Oracle 데이터베이스의 프로시저를 호출하는 방법에 대해 알아보겠습니다. Oracle의 C# 클라이언트를 사용하기 위해, 먼저 NuGet 패키지 관리자를 통해 Oracle.ManagedDataAccess 패키지를 설치해야 합니다.

4.1 Create 학생 추가 C# 코드

using Oracle.ManagedDataAccess.Client;

// CreateStudent 메소드 호출
public void AddStudent(string name, int age, string major)
{
    using (var connection = new OracleConnection("User Id=your_user;Password=your_password;Data Source=your_data_source"))
    {
        connection.Open();
        using (var command = new OracleCommand("CreateStudent", connection))
        {
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("p_Name", OracleDbType.Varchar2).Value = name;
            command.Parameters.Add("p_Age", OracleDbType.Int32).Value = age;
            command.Parameters.Add("p_Major", OracleDbType.Varchar2).Value = major;

            command.ExecuteNonQuery();
        }
    }
}

4.2 Read 학생 조회 C# 코드

public void GetStudent(int id)
{
    string name;
    int age;
    string major;

    using (var connection = new OracleConnection("User Id=your_user;Password=your_password;Data Source=your_data_source"))
    {
        connection.Open();
        using (var command = new OracleCommand("ReadStudent", connection))
        {
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("p_ID", OracleDbType.Int32).Value = id;
            command.Parameters.Add("p_Name", OracleDbType.Varchar2, 50).Direction = ParameterDirection.Output;
            command.Parameters.Add("p_Age", OracleDbType.Int32).Direction = ParameterDirection.Output;
            command.Parameters.Add("p_Major", OracleDbType.Varchar2, 50).Direction = ParameterDirection.Output;

            command.ExecuteNonQuery();

            name = command.Parameters["p_Name"].Value.ToString();
            age = Convert.ToInt32(command.Parameters["p_Age"].Value);
            major = command.Parameters["p_Major"].Value.ToString();
        }
    }
}

4.3 Update 학생 정보 수정 C# 코드

public void UpdateStudent(int id, string name, int age, string major)
{
    using (var connection = new OracleConnection("User Id=your_user;Password=your_password;Data Source=your_data_source"))
    {
        connection.Open();
        using (var command = new OracleCommand("UpdateStudent", connection))
        {
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("p_ID", OracleDbType.Int32).Value = id;
            command.Parameters.Add("p_Name", OracleDbType.Varchar2).Value = name;
            command.Parameters.Add("p_Age", OracleDbType.Int32).Value = age;
            command.Parameters.Add("p_Major", OracleDbType.Varchar2).Value = major;

            command.ExecuteNonQuery();
        }
    }
}

4.4 Delete 학생 삭제 C# 코드

public void DeleteStudent(int id)
{
    using (var connection = new OracleConnection("User Id=your_user;Password=your_password;Data Source=your_data_source"))
    {
        connection.Open();
        using (var command = new OracleCommand("DeleteStudent", connection))
        {
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("p_ID", OracleDbType.Int32).Value = id;

            command.ExecuteNonQuery();
        }
    }
}

5. 예제 실행 및 브라우저에서 결과 확인

이제 위의 C# 코드를 사용하여 CRUD 연산을 수행할 수 있습니다. 각 메소드를 호출하여 학생 정보를 추가하거나, 읽고, 수정하고, 삭제해 보세요. 아래는 간단한 테스트 예시입니다.

class Program
{
    static void Main(string[] args)
    {
        var app = new Application();

        // Create
        app.AddStudent("Alice", 20, "Computer Science");
        
        // Read
        app.GetStudent(1);

        // Update
        app.UpdateStudent(1, "Alice Johnson", 21, "Software Engineering");

        // Delete
        app.DeleteStudent(1);
    }
}

6. 결론

이번 포스트에서는 C#과 Oracle PL/SQL을 사용하여 CRUD 연산을 구현하는 방법에 대해 알아보았습니다. 각 연산에 대해 프로시저를 작성하고, C# 애플리케이션에서 이를 호출하여 데이터를 조작하는 방법을 설명하였습니다. 이러한 접근 방식은 코드의 재사용성을 높이고, 데이터를 처리하는 데 드는 시간을 단축시킬 수 있습니다. 데이터베이스 프로그래밍을 더욱 효과적으로 활용하여, 더 나은 애플리케이션을 개발할 수 있기를 바랍니다.

질문이나 더 알고 싶은 부분이 있다면 주저하지 말고 댓글로 남겨주세요!