본문 바로가기
카테고리 없음

Pro*c 설정하기 ( Oracle 18c & VS 2017 )

by 가능성1g 2019. 3. 4.
반응형

** 일하고 있는 회사의 이전에 사용하는 개발 조합이, pro*c + oracle9i, oracle10g 였습니다. 


HPUX 환경이었습니다. 


make 를 써서 열심히 컴파일하고 개발 했었네요~


그당시에, 로컬 환경인 윈도우에서 pro*c 환경을 구축해서 썼었는데, 잘안되었던게 기억이 납니다..


그래서, 제PC 에 환경 설정을 해보았습니다. (음??)


WIndows 10 Home

Oracle 18c

Visual Studio 2017 Community Edition


인터넷에 찾아보니 VS 2010 기준으로 설명이 되어있던데, 2017 되면서 조금 달라진 부분이 있어서 


삽질을 좀 했습니다. 


VS2010 설정 참조 :: https://m.blog.naver.com/gladiator67/180246917


1. VS2017을 실행시키고, 콘솔 응용프로그램으로 신규 합니다.


2. 자동으로 생성된 파일을 삭제 합니다.


3. .pc ( pro*c) 파일 하나 생성해서 추가합니다.


4. pro*c 컴파일을 위해 환경설정을 해줘야 합니다. 프로젝트 속성을 클릭합니다.
이부분이 2010 이전부분과 다른 부분입니다. 메뉴를 통해서 도구 옵션이 아닌 프로젝트 내의 솔루션 파일에서 속성을 눌러줘야 아래의  VC++ 디렉토리 부분을 찾을 수 있습니다. 


5. 링크에 나와있는 것처럼, 실행가능디렉터리, 포함 디렉터리, 라이브러리 디렉터리에 오라클이 설치된 위치의 pro*c 폴더를 각각 지정해 줍니다.  마지막으로 lib 파일도 등록합니다.


6. 구성관리자에 새구성을 선택해서 x64 환경으로 합니다. 


7. 아래에 추가되어 있는 테스트용 pro*c 소스를 써줍니다.


8. .pc 파일을 오른쪽 클릭하여 속성을 눌러, 해당파일의 컴파일 방법을 등록합니다. 


8. 사용자 빌드도구를 선택하고, 

입력/출력 을 링크에 나와있는것과 동일하게 입력합니다. 


9. null 값 오류 방지를 위해 입력값 옵션을 수정했습니다. 


10.pro*c 파일을 컴파일 합니다. 


11. 소스파일을 추가해서, 위에서 생성된 .c 파일을 추가 합니다. 


12. .c 파일을 컴파일 합니다. 


13. VS2017 에 콘솔을 신규하면, 자동으로 생기는 미리컴파일된 헤더때문에 오류가 발생하므로, 해당 옵션을 끄고, 미리컴파일된 파일 및 출력파일을 모두 지워 줍니다.



14. 컴파일 완료후, 실행하여, 정상 접속을 확인합니다.!!!



7에서 말한 pro*c 소스입니다.


#include <stdio.h> 
#include <sqlca.h>
#include <stdlib.h>
#include <string.h>

EXEC SQL BEGIN DECLARE SECTION;

  #define ID_LEN 30 
  #define PW_LEN 30
  #define CN_LEN 30
 
  VARCHAR id[ID_LEN];
  VARCHAR pw[PW_LEN];
  VARCHAR cn[CN_LEN];

EXEC SQL END DECLARE SECTION;

int main(void){

	//strncpy 를 쓰면, deprecated 관련해서 이제 오류발생하고 컴파일이 안됩니다. -> strncpy_s 로 변경해서 사용했습니다.
   strncpy_s(id.arr,sizeof(id.arr), "userid", 6); 
   id.len = (short)strlen((char*)id.arr); 
   id.arr[id.len] = '\0';

   strncpy_s(pw.arr,sizeof(pw.arr), "passpass", 8); 
   pw.len = (short)strlen((char*)pw.arr); 
   pw.arr[pw.len] = '\0';

   strncpy_s(cn.arr,sizeof(cn.arr), "tjorcl", 6); 
   cn.len = (short)strlen((char*)cn.arr); 
   cn.arr[cn.len] = '\0';
 
   EXEC SQL CONNECT :id IDENTIFIED BY :pw USING :cn;

   if (sqlca.sqlcode != 0){
      char* err_str = sqlca.sqlerrm.sqlerrmc; //문자열 내용

      int d = sqlca.sqlerrm.sqlerrml; // 문자열 길이
      printf("Connection Error : %.*s",d, err_str);
  
      return -1;
   }
 
   printf("Connected !");
 
   return 0;
}
 

perl 과 pro*c 를 비교해서 어느게 더 빠르고 개발이 편한지 알아보려고 했는데,

설정만으로도 perl 훨씬 편해 버리네요..


다음엔 perl 로 db 다루기를 보겠습니다.

반응형