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;
}