#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlca.h>
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char db_user[] = "scott";
char db_pass[] = "tiger";
char db_sid[] = "dev";
struct EMPLOYEE_T {
char emp_id[6];
char full_name[31];
char hire_date[9];
char married[2];
int salary;
char gender[2];
};
typedef struct EMPLOYEE_T EMPLOYEE_T;
EXEC SQL END DECLARE SECTION;
void display_employee_info(EMPLOYEE_T emp, int detail_mode) {
char on_leave_status[] = "Working";
if (detail_mode == 0) {
printf("%-10s // %-20s // %s\\n",
emp.emp_id, emp.full_name, on_leave_status);
}
else {
printf("\\n--- 직원 상세 정보 ---\\n");
printf(" - 사번 (EMP_ID) : %s\\n", emp.emp_id);
printf(" - 이름 (FULL_NAME) : %s\\n", emp.full_name);
printf(" - 입사일 (HIRE_DATE): %s\\n", emp.hire_date);
printf(" - 결혼 여부 : %s\\n", emp.married);
printf(" - 성별 (GENDER) : %s\\n", emp.gender);
printf(" - 연봉 (SALARY) : %d\\n", emp.salary);
printf(" - 재직 상태 : %s\\n", on_leave_status);
printf("----------------------\\n");
}
}
void connect_db() {
EXEC SQL CONNECT :db_user IDENTIFIED BY :db_pass USING :db_sid;
if (sqlca.sqlcode != 0) {
printf("🚨 DB 연결 실패 (SQLCODE: %d): %s\\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
exit(1);
} else {
printf("✅ DB 연결 성공: %s/%s@%s\\n", db_user, db_pass, db_sid);
}
}
void disconnect_db() {
EXEC SQL COMMIT WORK RELEASE;
printf("DB 연결 해제 완료.\\n");
}
int print_all_employees() {
EXEC SQL BEGIN DECLARE SECTION;
EMPLOYEE_T current_emp;
EXEC SQL END DECLARE SECTION;
EXEC SQL DECLARE emp_cursor CURSOR FOR
SELECT EMPL_ID, FULL_NAME, HIRE_DATE, MARRIED, GENDER, SALARY
FROM EMPLOYEES
ORDER BY EMPL_ID;
EXEC SQL OPEN emp_cursor;
printf("\\n============================================\\n");
printf(" ⭐ DB에서 가져온 전체 직원 목록 ⭐\\n");
printf("============================================\\n");
printf("%-10s // %-20s // %s\\n", "사번", "이름", "상태");
printf("--------------------------------------------\\n");
int found_count = 0;
while (1) {
EXEC SQL FETCH emp_cursor INTO
:current_emp.emp_id, :current_emp.full_name, :current_emp.hire_date,
:current_emp.married, :current_emp.gender, :current_emp.salary;
if (sqlca.sqlcode == 1403) break;
if (sqlca.sqlcode != 0) {
printf("🚨 데이터 조회 오류 (SQLCODE: %d): %s\\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
break;
}
display_employee_info(current_emp, 0);
found_count++;
}
EXEC SQL CLOSE emp_cursor;
printf("============================================\\n");
printf("총 %d명의 직원을 DB에서 조회했습니다.\\n", found_count);
return 0;
}
int print_employee_detail() {
EXEC SQL BEGIN DECLARE SECTION;
EMPLOYEE_T detail_emp;
char l_search_id[6];
EXEC SQL END DECLARE SECTION;
printf("조회할 사원의 사번(EMP_ID)을 입력하세요: ");
scanf("%s", l_search_id);
EXEC SQL SELECT EMPL_ID, FULL_NAME, HIRE_DATE, MARRIED, GENDER, SALARY
INTO :detail_emp.emp_id, :detail_emp.full_name, :detail_emp.hire_date,
:detail_emp.married, :detail_emp.gender, :detail_emp.salary
FROM EMPLOYEES
WHERE EMPL_ID = :l_search_id;
if (sqlca.sqlcode == 1403) {
printf("\\n ❌ 사번 [%s]에 해당하는 직원을 찾을 수 없습니다.\\n", l_search_id);
return -1;
} else if (sqlca.sqlcode != 0) {
printf("🚨 상세 조회 오류 (SQLCODE: %d): %s\\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
return -1;
}
display_employee_info(detail_emp, 1);
return 0;
}
int main() {
connect_db();
print_all_employees();
printf("\\n\\n--------------------------------------------\\n");
printf(" 🎯 특정 사원 정보 상세 조회\\n");
print_employee_detail();
printf("--------------------------------------------\\n");
disconnect_db();
return 0;
}
/* Result Sets Interface */
#ifndef SQL_CRSR
# define SQL_CRSR
struct sql_cursor
{
unsigned int curocn;
void *ptr1;
void *ptr2;
unsigned int magic;
};
typedef struct sql_cursor sql_cursor;
typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */
/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;
/* Object support */
struct sqltvn
{
unsigned char *tvnvsn;
unsigned short tvnvsnl;
unsigned char *tvnnm;
unsigned short tvnnml;
unsigned char *tvnsnm;
unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;
struct sqladts
{
unsigned int adtvsn;
unsigned short adtmode;
unsigned short adtnum;
sqltvn adttvn[1];
};
typedef struct sqladts sqladts;
static struct sqladts sqladt = {
1,1,0,
};
/* Binding to PL/SQL Records */
struct sqltdss
{
unsigned int tdsvsn;
unsigned short tdsnum;
unsigned char *tdsval[1];
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
1,
0,
};
/* File name & Package Name */
struct sqlcxp
{
unsigned short fillen;
char filnam[13];
};
static const struct sqlcxp sqlfpn =
{
12,
"조회 기능.pc"
};
static unsigned int sqlctx = 758691;
static struct sqlexd {
unsigned int sqlvsn;
unsigned int arrsiz;
unsigned int iters;
unsigned int offset;
unsigned short selerr;
unsigned short sqlety;
unsigned int occurs;
const short *cud;
unsigned char *sqlest;
const char *stmt;
sqladts *sqladtp;
sqltdss *sqltdsp;
void **sqphsv;
unsigned int *sqphsl;
int *sqphss;
void **sqpind;
int *sqpins;
unsigned int *sqparm;
unsigned int **sqparc;
unsigned short *sqpadto;
unsigned short *sqptdso;
unsigned int sqlcmax;
unsigned int sqlcmin;
unsigned int sqlcincr;
unsigned int sqlctimeout;
unsigned int sqlcnowait;
int sqfoff;
unsigned int sqcmod;
unsigned int sqfmod;
void *sqhstv[7];
unsigned int sqhstl[7];
int sqhsts[7];
void *sqindv[7];
int sqinds[7];
unsigned int sqharm[7];
unsigned int *sqharc[7];
unsigned short sqadto[7];
unsigned short sqtdso[7];
} sqlstm = {12,7};
/* SQLLIB Prototypes */
extern void sqlcxt (void **, unsigned int *,
struct sqlexd *, const struct sqlcxp *);
extern void sqlcx2t(void **, unsigned int *,
struct sqlexd *, const struct sqlcxp *);
extern void sqlbuft(void **, char *);
extern void sqlgs2t(void **, char *);
extern void sqlorat(void **, unsigned int *, void *);
/* Forms Interface */
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL = 535;
extern void sqliem(unsigned char *, signed int *);
static const char *sq0003 =
"select EMPL_ID ,FULL_NAME ,HIRE_DATE ,MARRIED ,GENDER ,SALARY from EMPLOYE\\
ES order by EMPL_ID ";
typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;
/* cud (compilation unit data) array */
static const short sqlcud0[] =
{12,4130,846,0,0,
5,0,0,0,0,0,27,45,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,1,10,0,0,
36,0,0,2,0,0,30,55,0,0,0,0,0,1,0,
51,0,0,3,107,0,9,69,0,0,0,0,0,1,0,
66,0,0,3,0,0,13,78,0,0,6,0,0,1,0,2,97,0,0,2,97,0,0,2,97,0,0,2,97,0,0,2,97,0,0,
2,3,0,0,
105,0,0,3,0,0,15,91,0,0,0,0,0,1,0,
120,0,0,4,124,0,4,106,0,0,7,1,0,1,0,2,97,0,0,2,97,0,0,2,97,0,0,2,97,0,0,2,97,0,
0,2,3,0,0,1,97,0,0,
};
癤?define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlca.h>
/* EXEC SQL INCLUDE SQLCA;
*/
/*
* $Header: sqlca.h 24-apr-2003.12:50:58 mkandarp Exp $ sqlca.h
*/
/* Copyright (c) 1985, 2003, Oracle Corporation. All rights reserved. */
/*
NAME
SQLCA : SQL Communications Area.
FUNCTION
Contains no code. Oracle fills in the SQLCA with status info
during the execution of a SQL stmt.
NOTES
**************************************************************
*** ***
*** This file is SOSD. Porters must change the data types ***
*** appropriately on their platform. See notes/pcport.doc ***
*** for more information. ***
*** ***
**************************************************************
If the symbol SQLCA_STORAGE_CLASS is defined, then the SQLCA
will be defined to have this storage class. For example:
#define SQLCA_STORAGE_CLASS extern
will define the SQLCA as an extern.
If the symbol SQLCA_INIT is defined, then the SQLCA will be
statically initialized. Although this is not necessary in order
to use the SQLCA, it is a good pgming practice not to have
unitialized variables. However, some C compilers/OS's don't
allow automatic variables to be init'd in this manner. Therefore,
if you are INCLUDE'ing the SQLCA in a place where it would be
an automatic AND your C compiler/OS doesn't allow this style
of initialization, then SQLCA_INIT should be left undefined --
all others can define SQLCA_INIT if they wish.
If the symbol SQLCA_NONE is defined, then the SQLCA variable will
not be defined at all. The symbol SQLCA_NONE should not be defined
in source modules that have embedded SQL. However, source modules
that have no embedded SQL, but need to manipulate a sqlca struct
passed in as a parameter, can set the SQLCA_NONE symbol to avoid
creation of an extraneous sqlca variable.
MODIFIED
lvbcheng 07/31/98 - long to int
jbasu 12/12/94 - Bug 217878: note this is an SOSD file
losborne 08/11/92 - No sqlca var if SQLCA_NONE macro set
Clare 12/06/84 - Ch SQLCA to not be an extern.
Clare 10/21/85 - Add initialization.
Bradbury 01/05/86 - Only initialize when SQLCA_INIT set
Clare 06/12/86 - Add SQLCA_STORAGE_CLASS option.
*/
#ifndef SQLCA
#define SQLCA 1
struct sqlca
{
/* ub1 */ char sqlcaid[8];
/* b4 */ int sqlabc;
/* b4 */ int sqlcode;
struct
{
/* ub2 */ unsigned short sqlerrml;
/* ub1 */ char sqlerrmc[70];
} sqlerrm;
/* ub1 */ char sqlerrp[8];
/* b4 */ int sqlerrd[6];
/* ub1 */ char sqlwarn[8];
/* ub1 */ char sqlext[8];
};
#ifndef SQLCA_NONE
#ifdef SQLCA_STORAGE_CLASS
SQLCA_STORAGE_CLASS struct sqlca sqlca
#else
struct sqlca sqlca
#endif
#ifdef SQLCA_INIT
= {
{'S', 'Q', 'L', 'C', 'A', ' ', ' ', ' '},
sizeof(struct sqlca),
0,
{ 0, {0}},
{'N', 'O', 'T', ' ', 'S', 'E', 'T', ' '},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0}
}
#endif
;
#endif
#endif
/* end SQLCA */
/* EXEC SQL BEGIN DECLARE SECTION; */
char db_user[] = "scott";
char db_pass[] = "tiger";
char db_sid[] = "dev";
struct EMPLOYEE_T {
char emp_id[6];
char full_name[31];
char hire_date[9];
char married[2];
int salary;
char gender[2];
};
typedef struct EMPLOYEE_T EMPLOYEE_T;
/* EXEC SQL END DECLARE SECTION; */
void display_employee_info(EMPLOYEE_T emp, int detail_mode) {
char on_leave_status[] = "Working";
if (detail_mode == 0) {
printf("%-10s // %-20s // %s\\n",
emp.emp_id, emp.full_name, on_leave_status);
}
else {
printf("\\n--- 吏곸썝 ?곸꽭 ?뺣낫 ---\\n");
printf(" - ?щ쾲 (EMP_ID) : %s\\n", emp.emp_id);
printf(" - ?대쫫 (FULL_NAME) : %s\\n", emp.full_name);
printf(" - ?낆궗??(HIRE_DATE): %s\\n", emp.hire_date);
printf(" - 寃고샎 ?щ? : %s\\n", emp.married);
printf(" - ?깅퀎 (GENDER) : %s\\n", emp.gender);
printf(" - ?곕큺 (SALARY) : %d\\n", emp.salary);
printf(" - ?ъ쭅 ?곹깭 : %s\\n", on_leave_status);
printf("----------------------\\n");
}
}
void connect_db() {
/* EXEC SQL CONNECT :db_user IDENTIFIED BY :db_pass USING :db_sid; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )10;
sqlstm.offset = (unsigned int )5;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)db_user;
sqlstm.sqhstl[0] = (unsigned int )0;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)db_pass;
sqlstm.sqhstl[1] = (unsigned int )0;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)db_sid;
sqlstm.sqhstl[2] = (unsigned int )0;
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlstm.sqlcmax = (unsigned int )100;
sqlstm.sqlcmin = (unsigned int )2;
sqlstm.sqlcincr = (unsigned int )1;
sqlstm.sqlctimeout = (unsigned int )0;
sqlstm.sqlcnowait = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if (sqlca.sqlcode != 0) {
printf("?슚 DB ?곌껐 ?ㅽ뙣 (SQLCODE: %d): %s\\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
exit(1);
} else {
printf("??DB ?곌껐 ?깃났: %s/%s@%s\\n", db_user, db_pass, db_sid);
}
}
void disconnect_db() {
/* EXEC SQL COMMIT WORK RELEASE; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )36;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
printf("DB ?곌껐 ?댁젣 ?꾨즺.\\n");
}
int print_all_employees() {
/* EXEC SQL BEGIN DECLARE SECTION; */
EMPLOYEE_T current_emp;
/* EXEC SQL END DECLARE SECTION; */
/* EXEC SQL DECLARE emp_cursor CURSOR FOR
SELECT EMPL_ID, FULL_NAME, HIRE_DATE, MARRIED, GENDER, SALARY
FROM EMPLOYEES
ORDER BY EMPL_ID; */
/* EXEC SQL OPEN emp_cursor; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = sq0003;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )51;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqcmod = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
printf("\\n============================================\\n");
printf(" 狩?DB?먯꽌 媛?몄삩 ?꾩껜 吏곸썝 紐⑸줉 狩?n");
printf("============================================\\n");
printf("%-10s // %-20s // %s\\n", "?щ쾲", "?대쫫", "?곹깭");
printf("--------------------------------------------\\n");
int found_count = 0;
while (1) {
/* EXEC SQL FETCH emp_cursor INTO
:current_emp.emp_id, :current_emp.full_name, :current_emp.hire_date,
:current_emp.married, :current_emp.gender, :current_emp.salary; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 6;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )66;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqfoff = ( int )0;
sqlstm.sqfmod = (unsigned int )2;
sqlstm.sqhstv[0] = ( void *)(current_emp.emp_id);
sqlstm.sqhstl[0] = (unsigned int )6;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)(current_emp.full_name);
sqlstm.sqhstl[1] = (unsigned int )31;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)(current_emp.hire_date);
sqlstm.sqhstl[2] = (unsigned int )9;
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)(current_emp.married);
sqlstm.sqhstl[3] = (unsigned int )2;
sqlstm.sqhsts[3] = ( int )0;
sqlstm.sqindv[3] = ( void *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)(current_emp.gender);
sqlstm.sqhstl[4] = (unsigned int )2;
sqlstm.sqhsts[4] = ( int )0;
sqlstm.sqindv[4] = ( void *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = ( void *)&(current_emp.salary);
sqlstm.sqhstl[5] = (unsigned int )sizeof(int);
sqlstm.sqhsts[5] = ( int )0;
sqlstm.sqindv[5] = ( void *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned int )0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if (sqlca.sqlcode == 1403) break;
if (sqlca.sqlcode != 0) {
printf("?슚 ?곗씠??議고쉶 ?ㅻ쪟 (SQLCODE: %d): %s\\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
break;
}
display_employee_info(current_emp, 0);
found_count++;
}
/* EXEC SQL CLOSE emp_cursor; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 6;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )105;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
printf("============================================\\n");
printf("珥?%d紐낆쓽 吏곸썝??DB?먯꽌 議고쉶?덉뒿?덈떎.\\n", found_count);
return 0;
}
int print_employee_detail() {
/* EXEC SQL BEGIN DECLARE SECTION; */
EMPLOYEE_T detail_emp;
char l_search_id[6];
/* EXEC SQL END DECLARE SECTION; */
printf("議고쉶???ъ썝???щ쾲(EMP_ID)???낅젰?섏꽭?? ");
scanf("%s", l_search_id);
/* EXEC SQL SELECT EMPL_ID, FULL_NAME, HIRE_DATE, MARRIED, GENDER, SALARY
INTO :detail_emp.emp_id, :detail_emp.full_name, :detail_emp.hire_date,
:detail_emp.married, :detail_emp.gender, :detail_emp.salary
FROM EMPLOYEES
WHERE EMPL_ID = :l_search_id; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 7;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "select EMPL_ID ,FULL_NAME ,HIRE_DATE ,MARRIED ,GENDER ,SALA\\
RY into :b0,:b1,:b2,:b3,:b4,:b5 from EMPLOYEES where EMPL_ID=:b6";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )120;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)(detail_emp.emp_id);
sqlstm.sqhstl[0] = (unsigned int )6;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)(detail_emp.full_name);
sqlstm.sqhstl[1] = (unsigned int )31;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)(detail_emp.hire_date);
sqlstm.sqhstl[2] = (unsigned int )9;
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)(detail_emp.married);
sqlstm.sqhstl[3] = (unsigned int )2;
sqlstm.sqhsts[3] = ( int )0;
sqlstm.sqindv[3] = ( void *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)(detail_emp.gender);
sqlstm.sqhstl[4] = (unsigned int )2;
sqlstm.sqhsts[4] = ( int )0;
sqlstm.sqindv[4] = ( void *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = ( void *)&(detail_emp.salary);
sqlstm.sqhstl[5] = (unsigned int )sizeof(int);
sqlstm.sqhsts[5] = ( int )0;
sqlstm.sqindv[5] = ( void *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned int )0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqhstv[6] = ( void *)l_search_id;
sqlstm.sqhstl[6] = (unsigned int )6;
sqlstm.sqhsts[6] = ( int )0;
sqlstm.sqindv[6] = ( void *)0;
sqlstm.sqinds[6] = ( int )0;
sqlstm.sqharm[6] = (unsigned int )0;
sqlstm.sqadto[6] = (unsigned short )0;
sqlstm.sqtdso[6] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if (sqlca.sqlcode == 1403) {
printf("\\n ???щ쾲 [%s]???대떦?섎뒗 吏곸썝??李얠쓣 ???놁뒿?덈떎.\\n", l_search_id);
return -1;
} else if (sqlca.sqlcode != 0) {
printf("?슚 ?곸꽭 議고쉶 ?ㅻ쪟 (SQLCODE: %d): %s\\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
return -1;
}
display_employee_info(detail_emp, 1);
return 0;
}
int main() {
connect_db();
print_all_employees();
printf("\\n\\n--------------------------------------------\\n");
printf(" ?렞 ?뱀젙 ?ъ썝 ?뺣낫 ?곸꽭 議고쉶\\n");
print_employee_detail();
printf("--------------------------------------------\\n");
disconnect_db();
return 0;
}