** 일하고 있는 회사의 이전에 사용하는 개발 조합이, 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 다루기를 보겠습니다.