반응형
기본 SQL문 실행
일반적인 SQL문을 실행하는 것에 대해서 알아보겠습니다. default connection으로 처리할 경우에는 AT절을 생략가능합니다.
SELECT (단건 조회)
char emp_name[54];
char job[32];
long salary;
long emp_number;
......
EXEC SQL AT :db_con1 SELECT ename, job, sal
INTO :emp_name, :job_title, :salary
FROM emp
WHERE empno = :emp_number;
if(sqlca.sqlcode != 0) { // 오류이면
if(sqlca.sqlcode == 1403) { // 조건에 맞는 데이터가 없으면...
printf("조회된 데이터 존재하지 않습니다.\n");
return 0;
} else {
fprintf(stderr, "%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
return -1;
}
}
위의 예제는 Table명 EMP의 column인 ENAME, JOB, SAL 컬럼의 정보를 조회해서 emp_name, job_title, salary라는 C언어의 변수에 저장하는 단건 조회 SQL문 실행 예제입니다. 만약, default Connection이라면 AT :db_con1 부분을 삭제하면 됩니다.
SELECT ~ FETCH (다건 조회)
char emp_name[54];
long dept_number;
long salary;
long emp_number;
......
EXEC SQL AT :db_con1 DECLARE emp_cursor CURSOR FOR
SELECT ename, empno, sal
FROM emp
WHERE deptno = :dept_number;
EXEC SQL OPEN emp_cursor;
if(sqlca.sqlcode != 0) {
fprintf(stderr, "CURSOR OPEN ERROR: %.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
return -1;
}
while(1) {
EXEC SQL FETCH emp_cursor
INTO :emp_name, :emp_number, :salary;
if(sqlca.sqlcode != 0) { // 오류이면
if(sqlca.sqlcode == 1403) { // 더 이상 조회된 내용이 없는 경우
printf("조회된 데이터가 더 없습니다.\n");
break;
} else {
fprintf(stderr, "%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
return -1;
}
}
printf("성명: %s \t사번: %ld \t급여: %f\n", emp_name, emp_number, salary);
}
......
위에서 default Connection이라면 AT :db_con1 부분을 삭제하면 됩니다.
INSERT
char emp_name[54];
long dept_number;
long salary;
long emp_number;
......
EXEC SQL AT :db_con1 INSERT INTO emp (empno, ename, sal, deptno)
VALUES (:emp_number, :emp_name, :salary, :dept_number);
// SQL 수행오류이면
if(sqlca.sqlcode != 0) {
fprintf(stderr, "%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
return -1;
}
......
위에서 default Connection이라면 AT :db_con1 부분을 삭제하면 됩니다.
UPDATE
long commission;
long salary;
long emp_number;
......
EXEC SQL AT :db_con1
UPDATE emp
SET sal = :salary,
comm = :commission
WHERE empno = :emp_number;
// SQL 수행오류이면
if(sqlca.sqlcode < 0) {
fprintf(stderr, "%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
return -1;
}
if(sqlca.sqlerrd[2] == 0) {
fprintf(stderr, "UPDATE된 데이터가 한 건도 없습니다.\n");
return -1;
} else {
printf("%d 건의 데이터가 UPDATE되었습니다.\n", sqlca.sqlerrd[2]);
return 0;
}
......
위에서 default Connection이라면 AT :db_con1 부분을 삭제하면 됩니다.
DELETE
long commission;
long salary;
long emp_number;
......
EXEC SQL AT :db_con1 DELETE FROM emp
WHERE deptno = :dept_number ;
// SQL 수행오류이면
if(sqlca.sqlcode < 0) {
fprintf(stderr, "%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
return -1;
}
if(sqlca.sqlerrd[2] == 0) {
fprintf(stderr, "삭제된 데이터가 한 건도 없습니다.\n");
return -1;
} else {
printf("%d 건의 데이터가 삭제되었습니다.\n", sqlca.sqlerrd[2]);
return 0;
}
......
위에서 default Connection이라면 AT :db_con1 부분을 삭제하면 됩니다.
See Also : Pro*C 목차 및 Sample Source
반응형
'Oracle > Pro*C' 카테고리의 다른 글
Pro*C 5-2. 오류 처리하기 (WHENEVER) (0) | 2019.09.25 |
---|---|
Pro*C 5-1. 오류 처리하기 (SQLCA) (0) | 2019.09.25 |
Pro*C 3. 변수선언과 INCLUDE (0) | 2019.09.25 |
Pro*C 2. DB 접속 해제 및 Commit / Rollback (0) | 2019.09.25 |
Pro*C 1. DBMS에 접속하기 (1) | 2019.09.25 |