원본 http://blog.naver.com/julymorning4/100024942904

간단한 Linux Pro*C 컴파일
아래글은 200X년 7월 naru 님이 쓰신 글입니다.

간단한 Linux Pro*C 컴파일


FAQ를 보니까 demo_proc.mk 를 사용하시는 분들이 많으신데,
제가 간단한 Pro*C make 방법을 소개합니다.
demo_proc.mk에서는 oracle의 모든 library를 load하게 되는데
실제로 make에 필요한 library는 몇개 안되는 것 같군요.(?)
아래와 같이 사용해 보세요.
-----------------------------------------------------
########################################################
### Linux Proc*C Makefile Sample ( Kang tae-il )
#########################################################
A= -D_INTRINSICS-I. -I/home/oracle/app/oracle/product/8.0.5/precomp/public
B= -L/home/oracle/app/oracle/product/8.0.5/lib -lclntsh -lcommon -lcore4 -lnlsrtl3

test :
proc test.pc
cc -c $(A) test.c
cc -o test test.o $(B)
-----------------------------------------------------
proc : .pc -> .c
A: .c -> .o
B: .o -> (EXE)
위 Makefile의 { -lclntsh -lcommon -lcore4 -lnlsrtl3 } 는 반드시 필요한 Option 으로 $ORACLE_HOME/lib 디렉토리에 {lib*.a} or {lib*.so}형태로 존재해야 합니다.
물론 /lib 디렉토리는 LD_LIBRARY_PATH 에 export 되어야겠죠?

'Oracle' 카테고리의 다른 글

[펌] Pro*c참고  (0) 2009.06.30
톰캣 설치후 오라클 DB 생성하기  (0) 2009.03.12
Select 시 Table 이름을 Dynamic 하게 이용하기  (0) 2007.01.22
Pro*C를 이용한 간단 Data Select  (0) 2007.01.22
Pro*c로 PL/SQL 실행하기  (0) 2007.01.22
, .


원본 http://blog.naver.com/julymorning4/100024942863

Select 시 Table 이름을 Dynamic 하게 이용하기
--------------------------------------------------------------------------------
SELECT 시 TABLE 이름을 DYNAMIC 하게 이용하기 (PRO*C)
Bulletin no : 11139
--------------------------------------------------------------------------------
다음은 method 3 를 이용해 select 하는 table 명을 dynamic 하게 가져가는
program 이다.

#include
#include

#define USERNAME "scott"
#define PASSWORD "tiger"

#include
#include

EXEC ORACLE OPTION (ORACA=YES);

char    *username = USERNAME;
char    *password = PASSWORD;
VARCHAR  dynstmt[80];
varchar     ename[10] ;
int      deptno = 10;
char     tab[10];
void sql_error();


main()
{
    EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error");
    oraca.orastxtf = ORASTFERR;

    EXEC SQL CONNECT :username IDENTIFIED BY :password;
    puts("\nConnected to Oracle.\n");
 
/*exec sql declare s statement;*/
 
  gets(tab);
    strcpy((char *)dynstmt.arr,
        "SELECT  ename FROM ");
   strcat((char*) dynstmt.arr,tab);
 
  dynstmt.len = strlen((char *)dynstmt.arr);

    puts((char *) dynstmt.arr);
    printf("   table name is  %s\n", tab );
    printf("\nEmployee\n");
    printf("--------\n");
  /*sprintf (statement ,"select ename from :tab");*/
    EXEC SQL PREPARE S FROM :dynstmt;
    EXEC SQL DECLARE C CURSOR FOR S;
    EXEC SQL OPEN C ;
    EXEC SQL WHENEVER NOT FOUND DO break;

    for (;;)
    {
        EXEC SQL FETCH C INTO :ename;

        ename.arr[ename.len] = '\0';
        puts((char *) ename.arr);
        }

    printf("\nQuery returned %d row%s.\n\n", sqlca.sqlerrd[2],
        (sqlca.sqlerrd[2] == 1) ? "" : "s");

    EXEC SQL CLOSE C;
    EXEC SQL COMMIT RELEASE;
    exit(0);
}


void sql_error(char *msg)
{
    printf("\n%s", msg);
    sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml] = '\0';
    oraca.orastxt.orastxtc[oraca.orastxt.orastxtl] = '\0';
    oraca.orasfnm.orasfnmc[oraca.orasfnm.orasfnml] = '\0';
    printf("\n%s\n", sqlca.sqlerrm.sqlerrmc);
    printf("in \"%s...\"\n", oraca.orastxt.orastxtc);
    printf("on line %d of %s.\n\n", oraca.oraslnr,
       oraca.orasfnm.orasfnmc);

    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL CLOSE C;
    EXEC SQL ROLLBACK RELEASE;!!!! exit(1);
}

'Oracle' 카테고리의 다른 글

톰캣 설치후 오라클 DB 생성하기  (0) 2009.03.12
간단한 Linux Pro*C 컴파일  (0) 2007.01.22
Pro*C를 이용한 간단 Data Select  (0) 2007.01.22
Pro*c로 PL/SQL 실행하기  (0) 2007.01.22
간단한 pro*c 예제  (0) 2007.01.22
, .


원본 http://blog.naver.com/julymorning4/100024943047

Pro*C를 이용한 간단 Data Select
#include <stdio.h>
#include <sqlca.h>

void sqlerror();

EXEC SQL BEGIN DECLARE SECTION;
char *connstr = "myscott/mytiger";
char db_ename[30];
intdb_deptno;
EXEC SQL END DECLARE SECTION;

void main() {
EXEC SQL WHENEVER SQLERROR DO sqlerror();
EXEC SQL WHENEVER SQLWARNING CONTINUE;
EXEC SQL CONNECT :connstr;

EXEC SQL WHENEVER NOTFOUND GOTO notfound;
EXEC SQL SELECT ENAME, DEPTNO
INTO db_ename, db_deptno
FROM EMP
WHEREEMPNO = 1004;

found:
printf("%s is in department %i\n", db_ename, db_deptno);
return;

notfound:
printf("Employee record not found in database.\n");
return;
}

void sqlerror() {
printf("Stop Error:\t%25i\n", sqlca.sqlcode);
return;
}

'Oracle' 카테고리의 다른 글

간단한 Linux Pro*C 컴파일  (0) 2007.01.22
Select 시 Table 이름을 Dynamic 하게 이용하기  (0) 2007.01.22
Pro*c로 PL/SQL 실행하기  (0) 2007.01.22
간단한 pro*c 예제  (0) 2007.01.22
[예제]텍스트 파일을 읽어 DB에...  (0) 2007.01.22
, .

원본 http://blog.naver.com/julymorning4/100024942920

Pro*c로 PL/SQL 실행하기
pro*C를 이용하여 PL/SQL을 실행하기 위해서는 컴파일 옵션에서

sqlcheck=semantics 라고 해주어야 합니다.

==========================================================

EXEC SQL include sqlca.h;

char* connstr = "test/test@test";

EXEC SQL BEGIN DECLARE SECTION;
VARCHAR v_ename[20];
EXEC SQL END DECLARE SECTION;


/*===========================================================*/
/* Main 선언 */
/*==========================================================*/
void main(int argc, char *argv[])
{
EXEC SQL CONNECT :connstr;

/********** PL/SQL Test **********/
printf("Embedded PL/SQL\n");

EXEC SQL EXECUTE
BEGIN
SELECT ENAME
INTO :v_ename
FROM emp
WHERE EMPNO=9999;
END;
END-EXEC;

memset(&v_ename.arr[v_ename.len],'\0',1);

printf("%s\n\n",v_ename.arr);
EXEC SQL COMMIT WORK RELEASE;
}


===============================================

Stored Procedure를 호출하기 위해선 아래처럼 하면 되구요...

EXEC SQL EXECUTE
BEGIN
upcall(:v_loc1);/* procedure name */
END;
END-EXEC;
, .