이번 글에서는 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# 애플리케이션에서 이를 호출하여 데이터를 조작하는 방법을 설명하였습니다. 이러한 접근 방식은 코드의 재사용성을 높이고, 데이터를 처리하는 데 드는 시간을 단축시킬 수 있습니다. 데이터베이스 프로그래밍을 더욱 효과적으로 활용하여, 더 나은 애플리케이션을 개발할 수 있기를 바랍니다.
질문이나 더 알고 싶은 부분이 있다면 주저하지 말고 댓글로 남겨주세요!