본문 바로가기

C-Language/Pro C, CRUD

Pro C, CRUD

Pro C, CRUD example
Oracle 10g(11g), Visual Studio 2008 Express Edition

#include <stdio.h>
#include "sqlca.h"

int select (int empno);
int insert (int empno, char *ename, int sal);
int update (int empno, int sal);
int delete (int empno);

int main(void) {

 int empno;
 char ename[20];
 int sal;
 
 printf("\n검색대상 사원번호를 입력하세요:");
 scanf("%d", &empno);
 select(empno);
 
 puts("\n입력할 사원정보(사번 이름 급여)를 공백으로 구분하여 입력하세요");
 scanf("%d %s %d", &empno, ename, &sal);
 insert(empno, ename, sal);
 
 puts("\n변경할 사원의 사번과 급여액을 공백으로 구분하여 입력하세요");
 scanf("%d %d", &empno, &sal);
 update(empno, sal);
 
 puts("\n삭제할 사원정보의 사번을 입력하세요");
 scanf("%d", &empno);
 delete(empno);
 
 printf("프로그램 종료\n");
 return 0;
}

int select(int _empno) {
 EXEC SQL BEGIN DECLARE SECTION;
  char *connstr = "scott/ojtit@orcl";
  int empno = _empno;
  VARCHAR ename[20];
  int deptno;
 EXEC SQL END DECLARE SECTION;
 
 EXEC SQL CONNECT :connstr;
 
 if(sqlca.sqlcode == 0) {
  printf("오라클 연결 성공\n");
 }else{
  printf("오류 : 오라클 연결 실패\n");
 }
 EXEC SQL WHENEVER NOT FOUND GOTO not_found;
 EXEC SQL WHENEVER SQLERROR GOTO sql_error;
 EXEC SQL
  SELECT ename, deptno
  INTO :ename, :deptno
  FROM employees
  WHERE
   empno = :empno;
 
 ename.arr[ename.len] = '\0';
 printf("검색된 사원정보 empno=%d, ename=%s, deptno=%d \n", empno, ename.arr, deptno);

 return 0;
 
 not_found:
 printf("검색된 사원정보가 없습니다\n");
 return 0;
 
 sql_error:
 printf("검색도중 오류가 발생했습니다\n");
 sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml] = '\0';
 printf("오류코드=%d, 오류메시지=%s \n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
 return 1;
}

int insert(int _empno, char *_ename, int _sal) {
 EXEC SQL BEGIN DECLARE SECTION;
  char *connstr = "scott/ojtit@orcl";
  int empno = _empno;
  char *ename = _ename;
  int sal = _sal;
 EXEC SQL END DECLARE SECTION;
 
 EXEC SQL CONNECT :connstr;
  
 if(sqlca.sqlcode == 0) {
  printf("오라클 연결 성공\n");
 }else{
  printf("오류 : 오라클 연결 실패\n");
 }
 
 EXEC SQL WHENEVER SQLERROR GOTO sql_error;
 EXEC SQL
  INSERT INTO
   employees (empno, ename, sal)
  VALUES (:empno, :ename, :sal);
  
 printf("성공적으로 사원정보를 저장했습니다\n");
 EXEC SQL COMMIT WORK RELEASE;
 
 return 0;
 
 sql_error:
 printf("레코드 입력도중 오류가 발생했습니다\n");
 sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml] = '\0';
 printf("오류코드=%d, 오류메시지=%s \n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
 return 1;

 not_found:
 return 1;
}

int update(int _empno, int _sal) {
 EXEC SQL BEGIN DECLARE SECTION;
  char *connstr = "scott/ojtit@orcl";
  int empno = _empno;
  int sal = _sal;
 EXEC SQL END DECLARE SECTION;
 
 EXEC SQL CONNECT :connstr;
  
 if(sqlca.sqlcode == 0) {
  printf("오라클 연결 성공\n");
 }else{
  printf("오류 : 오라클 연결 실패\n");
 }
 
 EXEC SQL WHENEVER SQLERROR GOTO sql_error;
 EXEC SQL
  UPDATE employees
  SET
   sal = :sal
  WHERE
   empno = :empno;
  
 printf("성공적으로 사원정보를 변경했습니다\n");
 EXEC SQL COMMIT WORK RELEASE;
 
 return 0;
 
 sql_error:
 EXEC SQL WHENEVER SQLERROR CONTINUE;
 printf("사원정보 변경도중 오류가 발생했습니다\n");
 sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml] = '\0';
 printf("오류코드=%d, 오류메시지=%s \n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
 EXEC SQL ROLLBACK WORK RELEASE;
 return 1;

 not_found:
 return 1;
}

int delete(int _empno) {
 EXEC SQL BEGIN DECLARE SECTION;
  char *connstr = "scott/ojtit@orcl";
  int empno = _empno;
 EXEC SQL END DECLARE SECTION;
 
 EXEC SQL CONNECT :connstr;
  
 if(sqlca.sqlcode == 0) {
  printf("오라클 연결 성공\n");
 }else{
  printf("오류 : 오라클 연결 실패\n");
 }
 
 EXEC SQL WHENEVER SQLERROR GOTO sql_error;
 EXEC SQL
  DELETE FROM
   employees
  WHERE
   empno = :empno;
  
 printf("성공적으로 사원정보를 삭제했습니다\n");
 EXEC SQL COMMIT WORK RELEASE;
 
 return 0;
 
 sql_error:
 EXEC SQL WHENEVER SQLERROR CONTINUE;
 printf("사원정보 삭제도중 오류가 발생했습니다\n");
 sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml] = '\0';
 printf("오류코드=%d, 오류메시지=%s \n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
 EXEC SQL ROLLBACK WORK RELEASE;
 return 1;

 not_found:
 return 1;
}