DB2SQC_TEST.BAT
@ECHO OFF REM ------------------------------------------------------------------------- REM - REM - DB2 환경변수 설정 REM - REM ------------------------------------------------------------------------- SET "SQLLIB_DIR=C:\Program Files\IBM\SQLLIB" SET "CLASSPATH=%SQLLIB_DIR%\java\db2java.zip;%SQLLIB_DIR%\java\db2jcc4.jar;%SQLLIB_DIR%\java\sqlj4.zip;%SQLLIB_DIR%\java\db2jcc_license_cu.jar;%SQLLIB_DIR%\bin;%SQLLIB_DIR%\java\common.jar;.;.;%CLASSPATH%" SET "DB2CLP=DB20FADE" SET "DB2INSTANCE=DB2" SET "DB2PATH=%SQLLIB_DIR%" SET "INCLUDE=%SQLLIB_DIR%\INCLUDE;%INCLUDE%" SET "LIB=%SQLLIB_DIR%\LIB;%LIB%" SET "Path=%SQLLIB_DIR%\BIN\..\db2tss\bin;%SQLLIB_DIR%\BIN;%SQLLIB_DIR%\FUNCTION;C:\Program Files\ibm\gsk8\lib64;C:\Program Files (x86)\ibm\gsk8\lib;%Path%" SET SRC_NAME=SQCTEST @ECHO ON REM ------------------------------------------------------------------------- REM - REM - DB2 시작 및 데이터베이스 생성 REM - REM ------------------------------------------------------------------------- DB2 DB2START DB2 CREATE DATABASE %SRC_NAME% REM ------------------------------------------------------------------------- REM - REM - DB2 접속 후 C언어로 변환 REM - REM ------------------------------------------------------------------------- DEL %SRC_NAME%.C DB2 CONNECT TO %SRC_NAME% DB2 PREP %SRC_NAME%.SQC BINDFILE REM ------------------------------------------------------------------------- REM - REM - C코드 컴파일 REM - make는 반드시 GnuWin32 make를 사용한다. REM - http://gnuwin32.sourceforge.net/packages/make.htm REM - REM ------------------------------------------------------------------------- RMDIR DB2PATH MKLINK /D DB2PATH "%DB2PATH%" sourceanalyzer.exe -b test -clean sourceanalyzer.exe -b test -64 -Xmx4096m -logfile sca1.log make -f Makefile sourceanalyzer.exe -b test -64 -Xmx4096m -logfile sca2.log -scan -f %SRC_NAME%.fpr REM ------------------------------------------------------------------------- REM - REM - DB2 접속 종료 및 불필요한 파일 삭제 REM - REM ------------------------------------------------------------------------- RMDIR DB2PATH DB2 CONNECT RESET REM DB2 DROP DATABASE %SRC_NAME% REM DB2 DB2STOP
Makefile
$(SRC_NAME).o : $(SRC_NAME).c gcc -IDB2PATH/include -Wno-stringop-overflow -c -o $(SRC_NAME).o $(SRC_NAME).c clean: del *.c *.o
SQCTEST.SQC
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlenv.h>
#include <sqlutil.h>
EXEC SQL BEGIN DECLARE SECTION;
short id;
char name[10];
short dept;
double salary;
char hostVarStmtDyn[50];
EXEC SQL END DECLARE SECTION;
int main()
{
int rc = 0;
EXEC SQL INCLUDE SQLCA;
/* connect to the database */
printf("\n Connecting to database...");
EXEC SQL CONNECT TO "sample";
if (SQLCODE <0)
{
printf("\nConnect Error: SQLCODE = %d. \n", SQLCODE);
goto connect_reset;
}
else
{
printf("\n Connected to database.\n");
}
/* execute an SQL statement (a query) using static SQL; copy the single row
of result values into host variables*/
EXEC SQL SELECT id, name, dept, salary
INTO :id, :name, :dept, :salary
FROM staff WHERE id = 310;
if (SQLCODE <0)
{
printf("Select Error: SQLCODE = %d. \n", SQLCODE);
}
else
{
/* print the host variable values to standard output */
printf("\n Executing a static SQL query statement, searching for\n the id value equal to 310\n");
printf("\nID Name DEPT Salary\n");
printf(" %d %s %d %f\n", id, name, dept, salary);
}
strcpy(hostVarStmtDyn, "UPDATE staff SET salary = salary + 1000 WHERE dept = ?");
/* execute an SQL statement (an operation) using a host variable
and DYNAMIC SQL*/
EXEC SQL PREPARE StmtDyn FROM :hostVarStmtDyn;
if (SQLCODE <0)
{
printf("Prepare Error: SQLCODE = %d. \n", SQLCODE);
}
else
{
EXEC SQL EXECUTE StmtDyn USING :dept;
}
if (SQLCODE <0)
{
printf("Execute Error: SQLCODE = %d. \n", SQLCODE);
}
/* Read the updated row using STATIC SQL and CURSOR */
EXEC SQL DECLARE posCur1 CURSOR FOR
SELECT id, name, dept, salary
FROM staff WHERE id = 310;
if (SQLCODE <0)
{
printf("Declare Error: SQLCODE = %d. \n", SQLCODE);
}
EXEC SQL OPEN posCur1;
EXEC SQL FETCH posCur1 INTO :id, :name, :dept, :salary ;
if (SQLCODE <0)
{
printf("Fetch Error: SQLCODE = %d. \n", SQLCODE);
}
else
{
printf(" Executing an dynamic SQL statement, updating the\n salary value for the id equal to 310\n");
printf("\n ID Name DEPT Salary\n");
printf(" %d %s %d %f\n", id, name, dept, salary);
}
EXEC SQL CLOSE posCur1;
/* Commit the transaction */
printf("\n Commit the transaction.\n");
EXEC SQL COMMIT;
if (SQLCODE <0)
{
printf("Error: SQLCODE = %d. \n", SQLCODE);
}
/* Disconnect from the database */
connect_reset :
EXEC SQL CONNECT RESET;
if (SQLCODE <0)
{
printf("Connection Error: SQLCODE = %d. \n", SQLCODE);
}
return 0;
} /* end main */
