리눅스에서 pro*c 로 blob에 넣은 텍스트를 가져오는 방법 아시는분.
소스와 간단한 makefile 예를 알려주시거나 어디에 자료가 있다는것좀 알려주시면 감사하겠습니다.
이리저리 찾아봐도 아직 c에 대해서 잘 모르고 makefile에 대해서도 잘 모르고 pro*c 에 대해서도 잘 모르니 잘 안되네요. 컴파일에서도 에러 나고.
os : Redhat 6.2
oracle : Oracle 8i 816버전(linux)
blob.pc
/*
#include <oci.h>
#include <string.h>
#include <stdio.h>
#include <sqlca.h>
#include <stdlib.h>
#include <sqlcpr.h>
*/
#include <oci.h>
#include <stdio.h>
#include <string.h>
#include <sqlca.h>
#include <stdlib.h>
#include <sqlcpr.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#include <ctype.h>
#define TERM(X) ( X.arr[X.len] = '\0' )
#define SLEN(X) ( X.len = strlen((char *)X.arr) )
#define MAX_BUF 1000000
#define MAXSIZE 4096
#define READ_SIZE 60
EXEC SQL INCLUDE SQLCA;
/* Structure for VARCHAR */
typedef struct {ub4 len; text buf[1];} long_varrow;
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR oracleid[20];
EXEC SQL TYPE long_varrow IS LONG VARRAW(MAXSIZE);
long_varrow my_vr;
EXEC SQL END DECLARE SECTION;
main()
{
OCIBlobLocator *Lob_loc;
unsigned int amt, offset=1;
unsigned char buff[MAX_BUF];
/*
EXEC SQL WHENEVER SQLERROR DO o_error(action_str);
*/
strcpy( (char *)oracleid.arr, "news/news" );
SLEN( oracleid );
/*
strcpy( action_str, "connecting to d/b" );
*/
EXEC SQL CONNECT :oracleid;
EXEC SQL ALLOCATE :Lob_loc;
EXEC SQL SELECT content into :Lob_loc from tdoc where id = 693636617;
amt = MAX_BUF;
EXEC SQL LOB READ :amt FROM :Lob_loc AT :offset INTO :my_vr;
EXEC SQL FREE :Lob_loc;
/*
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK WORK RELEASE;
*/
}
/*
int o_error( action_str )
char *action_str;
{
int i;
char error_str[150];
EXEC SQL WHENEVER SQLERROR CONTINUE;
for ( i = 0; i < sqlca.sqlerrm.sqlerrml; i++ )
{
error_str = sqlca.sqlerrm.sqlerrmc;
}
error_str = '\0';
printf( "\nFailed with following Oracle error while %s:\n\n%s",
action_str, error_str );
EXEC SQL ROLLBACK WORK RELEASE;
exit(1);
}
*/
Makefile
############################################
# FILENAME : makefile
# DATE :1997.4.16
# MADE BY :SunHee Baek
############################################
include $(ORACLE_HOME)/precomp/demo/proc/demo_proc.mk
CC=gcc
ETC= page_view.o cgi.o view.o cookies.o cgi_ora.c
ETCSRC= $(ETC:.o=.c)
OBJECTS= $(NPROGOBJS)
CSOURCES= $(OBJECTS:.o=.c)
PCSOURCES= $(OBJECTS:.o=.pc)
CFLAGS=-I$(ORACLE_HOME)/include
LDFLAGS = -L$(ORACLE_HOME)/lib
CFLAGS= -g
OTHERS=makefile
PRODUCTS=view.cgi
all : pc.c view.cgi myrm
view.cgi :$(NPROGOBJS) $(ETC)
$(CC) -o $@ $(CFLAGS) $(NPROGOBJS) $(ETC) $(LDFLAGS) $(PROLDLIBS)
touch:
touch $(PCSOURCES) $(ETCSRC)
myrm :
/bin/rm -f tp* *.lis
copy :
cp $(PRODUCTS) /user/local/apache/cgi-bin
blob.o: blob.pc
make -f $(ORACLE_HOME)/precomp/demo/proc/demo_proc.mk PCCSRC=blob.pc I_SYM=include= pc1
$(CC) $(CFLAGS) $(INCLUDE) -c $*.c
cgi_ora.c:
make -f $(ORACLE_HOME)/precomp/demo/proc/demo_proc.mk PCCSRC=cgi_ora.pc I_SYM=include= pc1
$(CC) $(CFLAGS) -c $*.c
.c.o:
$(CC) $(CFLAGS) -c $*.c
제가 작성한게 아니라 이리저리 가져다가 짜집기했는데 안되네요.
make -f Makefile blob
Makefile:48: warning: overriding commands for target `.c.o'
/home/oracle/ora816/precomp/demo/proc/demo_proc.mk:123: warning: ignoring old co
mmands for target `.c.o'
make -f /home/oracle/ora816/precomp/demo/proc/demo_proc.mk PCCSRC=blob.pc I_SYM=
include= pc1
make[1]: Entering directory `/home/oracle/program_test'
proc iname=blob.pc include=. include=/home/oracle/ora816/precomp/syshdr include
=/home/oracle/ora816/precomp/public include=/home/oracle/ora816/rdbms/public inc
lude=/home/oracle/ora816/rdbms/demo include=/home/oracle/ora816/plsql/public inc
lude=/home/oracle/ora816/network/public
Pro*C/C++: Release 8.1.6.0.0 - Production on Wed Oct 25 23:51:14 2000
(c) Copyright 1999 Oracle Corporation. All rights reserved.
System default option values taken from: /home/oracle/ora816/precomp/admin/pcscf
g.cfg
Syntax error at line 132, column 3, file /usr/include/limits.h:
Error at line 132, column 3 in file /usr/include/limits.h
# include_next <limits.h>
..1
PCC-S-02014, Encountered the symbol "include_next" when expecting one of the fol
lowing:
a numeric constant, newline, define, elif, else, endif,
error, if, ifdef, ifndef, include, line, pragma, undef,
an immediate preprocessor command, a C token,
The symbol "newline," was substituted for "include_next" to continue.
make[1]: Leaving directory `/home/oracle/program_test'
gcc -g -I. -I/home/oracle/ora816/precomp/public -I/home/oracle/ora816/rdbms/publ
ic -I/home/oracle/ora816/rdbms/demo -I/home/oracle/ora816/plsql/public -I/home/o
racle/ora816/network/public -c blob.c
gcc -L/home/oracle/ora816/lib blob.o `cat /home/oracle/ora816/lib/sysliblist
` -ldl -lm -o blob
blob.o: In function `main':
/home/oracle/program_test/blob.c:336: undefined reference to `sqlcxt'
/home/oracle/program_test/blob.c:374: undefined reference to `sqlcxt'
/home/oracle/program_test/blob.c:411: undefined reference to `sqlcxt'
/home/oracle/program_test/blob.c:472: undefined reference to `sqlcxt'
/home/oracle/program_test/blob.c:509: undefined reference to `sqlcxt'
collect2: ld returned 1 exit status
make: *** [blob] Error 1
|