3.첫 번째 Pro C 프로그램 작성하기, 내용 기본 연결, 간단한 SELECT 문 실행, 결과 출력.

Pro*C는 Oracle의 C 기반의 프로그래밍 언어로, 데이터베이스와의 상호작용을 매우 효율적으로 수행할 수 있도록 돕습니다. 이 글에서는 Pro*C 프로그램의 기본적인 설정, 간단한 SELECT 쿼리 실행, 그리고 결과 출력을 다룰 것입니다.

1. Pro*C 소개

Pro*C는 Oracle 데이터베이스와 C언어 간의 인터페이스를 제공합니다. 이는 C 프로그램 내에서 SQL 쿼리를 작성하고 실행할 수 있게 도와줍니다. Pro*C 프로그램은 일반 C 프로그램과 거의 유사하지만, SQL 구문이 포함되어 있다는 점에서 차별화됩니다.

2. Pro*C 환경 설정

Pro*C 프로그램을 작성하기 전에, 개발 환경을 설정해야 합니다. 일반적으로 필요한 구성 요소는 다음과 같습니다:

  • Oracle 데이터베이스 및 클라이언트 설치
  • C 컴파일러 (예: GCC)
  • Pro*C precompiler

환경 설정이 완료되었다면, Pro*C 소스를 작성할 준비가 되었습니다.

3. 첫 번째 Pro*C 프로그램

3.1 기본 연결

우선 Oracle 데이터베이스와의 연결을 설정해야 합니다. 다음은 기본적인 연결을 위한 코드 샘플입니다:


#include <stdio.h>
#include <stdlib.h>
#include <sqlca.h> // SQLCA 구조체를 포함해야 함
#include <sqlcpr.h> // SQL 실행을 위한 헤더

EXEC SQL BEGIN DECLARE SECTION;
char *username = "your_username"; // 사용자 이름
char *password = "your_password"; // 비밀번호
char *db = "your_db"; // 데이터베이스 이름
EXEC SQL END DECLARE SECTION;

int main() {
    // Oracle 데이터베이스에 연결
    EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db;

    if (sqlca.sqlcode != 0) {
        printf("데이터베이스 연결 실패: %d\n", sqlca.sqlcode);
        return 1;
    }
    printf("데이터베이스에 성공적으로 연결되었습니다.\n");

    // 연결 종료
    EXEC SQL COMMIT WORK RELEASE;

    return 0;
}
        

3.2 간단한 SELECT 문 실행

연결이 성공적으로 이루어진 후, 간단한 SELECT 문을 실행해보겠습니다. 예를 들어, EMPLOYEES 테이블에서 직원의 이름과 급여를 조회하는 프로그램이 있습니다:


#include <stdio.h>
#include <stdlib.h>
#include <sqlca.h>
#include <sqlcpr.h>

EXEC SQL BEGIN DECLARE SECTION;
char *username = "your_username"; // 사용자 이름
char *password = "your_password"; // 비밀번호
char *db = "your_db"; // 데이터베이스 이름
char employee_name[50]; // 직원 이름
double salary; // 급여
EXEC SQL END DECLARE SECTION;

int main() {
    // 데이터베이스에 연결
    EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db;

    if (sqlca.sqlcode != 0) {
        printf("데이터베이스 연결 실패: %d\n", sqlca.sqlcode);
        return 1;
    }

    // SELECT 문 실행
    EXEC SQL SELECT name, salary INTO :employee_name, :salary FROM EMPLOYEES WHERE ROWNUM = 1;

    if (sqlca.sqlcode == 0) {
        printf("직원 이름: %s, 급여: %.2f\n", employee_name, salary);
    } else {
        printf("조회 실패: %d\n", sqlca.sqlcode);
    }

    // 연결 종료
    EXEC SQL COMMIT WORK RELEASE;

    return 0;
}
        

3.3 결과 출력

위의 SELECT 문은 EMPLOYEES 테이블에서 첫 번째 직원의 이름과 급여를 출력합니다. 결과가 성공적으로 출력되면 경과된 시간이 아닌 다른 정보를 추가로 출력할 수 있습니다. 예를 들어, 아래와 같이 쿼리를 수정하여 전체 직원 목록을 출력할 수 있습니다:


#include <stdio.h>
#include <stdlib.h>
#include <sqlca.h>
#include <sqlcpr.h>

EXEC SQL BEGIN DECLARE SECTION;
char *username = "your_username"; // 사용자 이름
char *password = "your_password"; // 비밀번호
char *db = "your_db"; // 데이터베이스 이름
char employee_name[50]; // 직원 이름
double salary; // 급여
EXEC SQL END DECLARE SECTION;

int main() {
    // 데이터베이스에 연결
    EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db;

    if (sqlca.sqlcode != 0) {
        printf("데이터베이스 연결 실패: %d\n", sqlca.sqlcode);
        return 1;
    }

    // 결과 집합을 저장하기 위한 커서 선언
    EXEC SQL DECLARE emp_cursor CURSOR FOR
        SELECT name, salary FROM EMPLOYEES;

    // 커서 열기
    EXEC SQL OPEN emp_cursor;

    // 결과 집합을 순회하며 출력
    while (1) {
        EXEC SQL FETCH emp_cursor INTO :employee_name, :salary;
        if (sqlca.sqlcode != 0) break; // 더 이상의 데이터가 없으면 종료
        printf("직원 이름: %s, 급여: %.2f\n", employee_name, salary);
    }

    printf("모든 직원 정보 출력 완료.\n");

    // 커서 닫기
    EXEC SQL CLOSE emp_cursor;

    // 연결 종료
    EXEC SQL COMMIT WORK RELEASE;

    return 0;
}
        

4. 예제 실행 방법

유닉스 계열 OS의 경우 다음과 같은 명령어를 통해서 Pro*C 프로그램을 컴파일하고 실행할 수 있습니다:

  1. Pro*C 컴파일러를 사용하여 SQL 문이 포함된 소스를 처리합니다: proc iname=your_program.pc
  2. 생성된 C 소스를 컴파일합니다: gcc your_program.c -o your_program -I$ORACLE_HOME/rdbms/public -L$ORACLE_HOME/lib -lclntsh
  3. 프로그램을 실행합니다: ./your_program

5. 마무리

이글에서는 Pro*C의 기본적인 사용법을 설명했습니다. Oracle 데이터베이스와의 연결, 간단한 SQL 쿼리 실행, 그리고 결과 출력까지의 과정이 포함되어 있습니다. Pro*C는 강력한 데이터베이스 프로그래밍 도구이므로 복잡한 비즈니스 로직을 구현하는 데 유용합니다. 더 깊이 있는 기능이나 복잡한 예제는 Oracle 공식 문서나 Pro*C 관련 자료들을 통해 찾아보길 권장합니다.