1.動作確認のために使用したPrco*Cプログラム
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sqlca.h> /* SQL> desc dept 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- DEPTNO NOT NULL NUMBER(2) DNAME VARCHAR2(14) LOC VARCHAR2(13) */ struct { char deptno[2+1]; char dname[14+1]; char loc[13+1]; } rec; void main(argc,argv) int argc; char *argv[]; { char *sp_uid = "scott/tiger"; EXEC SQL CONNECT :sp_uid; EXEC SQL DECLARE CUR_SCOTT CURSOR FOR SELECT DEPTNO,DNAME,LOC FROM DEPT; EXEC SQL OPEN CUR_SCOTT; while(1) { EXEC SQL FETCH CUR_SCOTT INTO :rec; if (sqlca.sqlcode == 1403) { break; } printf("DEPTNO = [%s]\n",rec.deptno); printf("DNAME = [%s]\n",rec.dname); printf("LOC = [%s]\n",rec.loc); } }
2.$ORACLE_HOME/precomp/admin/pcscfg.cfg を環境に合わせて調整
$ vi $ORACLE_HOME/precomp/admin/pcscfg.cfg ======================================================================= diff pcscfg.cfg.org pcscfg.cfg 1c1 < sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc-lib/x86_64-redhat-linux/3.2.3/include,/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include,/usr/lib64/gcc/x86_64-suse-linux/4.1.0/include,/usr/lib64/gcc/x86_64-suse-linux/4.3/include) --- > sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/include/x86_64-linux-gnu,/usr/lib/gcc/x86_64-linux-gnu/6.2.0/include) =======================================================================3.LD_LIBRARY_PATHを設定
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
- $ORACLE_HOME/lib配下には、ubuntu のデフォルトライブラリと重複するライブラリがあるため、 ウインドウマネージャを使用するアカウントや、ライブラリ更新などを行うアカウントの .profile などに登録すると干渉起こす場合がある。オラクル関連のアプリをコンパイル、起動する際に 設定するか、専用のアカウントで使用するのがよいと思われる。
4.コンパイル用Makefile (procオプションのコード生成は"ANSI_C"とする)
PROGRAM = sample01 OBJS = sample01.o CC = gcc PROC = proc PFLAGS = include=$(ORACLE_HOME)/precomp/public PFLAGS += include=$(ORACLE_HOME)/rdbms/public PFLAGS += include=. PFLAGS += CODE=ANSI_C #PFLAGS += CODE=CPP CFLAGS = -O3 -trigraphs -fPIC -DPRECOMP CFLAGS += -I$(ORACLE_HOME)/precomp/public CFLAGS += -I$(ORACLE_HOME)/rdbms/public CFLAGS += -I$(ORACLE_HOME)/plsql/public CFLAGS += -I$(ORACLE_HOME)/network/public CFLAGS += -I. CFLAGS += -DLINUX -DORAX86_64 -D_GNU_SOURCE -D_LARGEFILE64_SOURCE=1 CFLAGS += -D_LARGEFILE_SOURCE=1 -DSLTS_ENABLE -DSLMXMX_ENABLE -D_REENTRANT CFLAGS += -DNS_THREADS -DLONG_IS_64 -DSS_64BIT_SERVER -DLDAP_CM -m64 LDFLAGS = -L$(ORACLE_HOME)/lib -lclntsh -lsql12 -L $(ORACLE_HOME)/precomp/lib -lproc2 -lm .SUFFIXES: .c .o .SUFFIXES: .pc .c $(PROGRAM):$(OBJS) $(CC) $^ -o $@ $(LDFLAGS) .c.o: $(CC) $(CFLAGS) -c $< .pc.c: $(PROC) iname=$* $(PFLAGS) clean:
5.コンパイルと実行
$ ls -l 合計 16 -rw-r--r-- 1 naoki naoki 904 3月 29 15:24 Makefile -rw-r--r-- 1 naoki naoki 854 3月 29 15:24 sample01.pc $ make proc iname=sample01 include=/u01/app/oracle/product/11.2.0/dbhome_1/precomp/public include=/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/public include=. CODE=ANSI_C Pro*C/C++: Release 11.2.0.1.0 - Production on 水 3月 29 15:33:04 2017 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. システムのデフォルト・オプション値: /u01/app/oracle/product/11.2.0/dbhome_1/precomp/admin/pcscfg.cfg gcc -O3 -trigraphs -fPIC -DPRECOMP -I/u01/app/oracle/product/11.2.0/dbhome_1/precomp/public -I/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/public -I/u01/app/oracle/product/11.2.0/dbhome_1/plsql/public -I/u01/app/oracle/product/11.2.0/dbhome_1/network/public -I. -DLINUX -DORAX86_64 -D_GNU_SOURCE -D_LARGEFILE64_SOURCE=1 -D_LARGEFILE_SOURCE=1 -DSLTS_ENABLE -DSLMXMX_ENABLE -D_REENTRANT -DNS_THREADS -DLONG_IS_64 -DSS_64BIT_SERVER -DLDAP_CM -m64 -c sample01.c gcc sample01.o -o sample01 -L/u01/app/oracle/product/11.2.0/dbhome_1/lib -lclntsh -lsql11 -L /u01/app/oracle/product/11.2.0/dbhome_1/precomp/lib -lproc2 -lm rm sample01.c $ ls -l 合計 48 -rw-r--r-- 1 inst12c inst12c 904 3月 29 15:24 Makefile -rwxr-xr-x 1 inst12c inst12c 12928 3月 29 15:33 sample01 -rw-r--r-- 1 inst12c inst12c 0 3月 29 15:33 sample01.lis -rw-r--r-- 1 inst12c inst12c 4552 3月 29 15:33 sample01.o -rw-r--r-- 1 inst12c inst12c 854 3月 29 15:24 sample01.pc $ sample01 DEPTNO = [10] DNAME = [ACCOUNTING ] LOC = [NEW YORK ] DEPTNO = [20] DNAME = [RESEARCH ] LOC = [DALLAS ] DEPTNO = [30] DNAME = [SALES ] LOC = [CHICAGO ] DEPTNO = [40] DNAME = [OPERATIONS ] LOC = [BOSTON ]
0 件のコメント:
コメントを投稿