[DB2] sqc 빌드 테스트

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 */
위로 스크롤