您的位置:首页 > 数据库

Proc*C实例一 -- 连接数据库

2013-06-17 14:54 190 查看
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处
、作者信息和本声明。否则将追究法律责任。
/article/8110595.html
最近由于项目的需要,了解了下Proc*C。笔者也只是刚了解了如何连接ORACLE数据库,原理以后再慢慢研究。给出代码和Makefile文件,大家使用时只需要根据实际情况修改下路径ORALCE_HOME以及用户名密码还有监听的实例名就可以了。

1. conn.pc 文件

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

EXEC SQL BEGIN DECLARE SECTION;
char *uid = "xiaogenban/xiaogenban@xiaogenban";
EXEC SQL END DECLARE SECTION;

int main()
{
EXEC SQL CONNECT :uid;
printf("%s",sqlca.sqlerrm.sqlerrmc);
if(sqlca.sqlcode == 0)
printf("Success!!!\n");
else
printf("Fail!!!, the sqlcode is %d\n", sqlca.sqlcode);
}

xiaogenban/xiaogenban 为用户名密码

@后面的xiaogenban为数据库实例名,一般在ORACLE_HOME/network/admin/tnsnames.ora中要配置。

2. Makefile文件

kefile for the Pro*C Precompiler:
#       precompiling, compliling, and linking using the gcc compiler.
#
############################
ORA_INC=-I$(ORACLE_HOME)/precomp/public
ORA_LIBDIR=-L$(ORACLE_HOME)/lib -L$(ORACLE_HOME)/rdbms/lib -L$(ORACLE_HOME)/precomp/lib \
-L$(ORACLE_HOME)/sqlplus/lib -L$(ORACLE_HOME)/otrace/lib
ORA_LIBS= -lclntsh
#
PROC=proc
PROCFLAGS=dbms=v6_char
#
CC=gcc
CFLAGS= $(ORA_INC) -I.
#
PROGS= conn
#
OBJS= conn.o
#############################

all: $(PROGS)

%.c:%.pc
$(PROC) $(PROCFLAGS) iname=$^
%.o:%.c
$(CC) $(CFLAGS) -c $<
conn: ${OBJS}
$(CC) $(CFLAGS) -o $@ $< $(ORA_LIBDIR) $(ORA_LIBS) -lm
clean:
rm *.o *.c *.lis $(PROGS)

#附: $^ : 所有依赖文件; $< : 依赖的第一个文件; $@ : 目标文件

这个Makefile文件是我根据内置规则重新写过的,第一版的Makefile更好懂点,如下:

kefile for the Pro*C Precompiler:
#       precompiling, compliling, and linking using the gcc compiler.
#
ORA_INC=-I$(ORACLE_HOME)/precomp/public
ORA_LIBDIR=-L$(ORACLE_HOME)/lib -L$(ORACLE_HOME)/rdbms/lib -L$(ORACLE_HOME)/precomp/lib \
-L$(ORACLE_HOME)/sqlplus/lib -L$(ORACLE_HOME)/otrace/lib
ORA_LIBS= -lclntsh
#
#
PROC=proc
PROCFLAGS=dbms=v6_char
#
CC=gcc
CFLAGS= $(ORA_INC) -I.
#
#
PROGS= conn

all: $(PROGS)

conn: conn.pc
$(PROC) $(PROCFLAGS) iname=conn.pc
$(CC) $(CFLAGS) -c $conn.c
$(CC) $(CFLAGS) -o conn conn.o $(ORA_LIBDIR) $(ORA_LIBS) -lm
clean:
rm *.o conn.c *.lis $(PROGS)


直接make all 应该是可以连接上数据库的 :)

[cardc@cardC b]$ make all

proc dbms=v6_char iname=conn.pc

Pro*C/C++: Release 10.2.0.1.0 - Production on Mon Jun 17 14:54:59 2013

Copyright (c) 1982, 2005, Oracle. All rights reserved.

System default option values taken from: /home/oracle/oracle/product/10.2.0/client_1/precomp/admin/pcscfg.cfg

PCC-W-02110, DBMS=V6_CHAR is deprecated. Use CHAR_MAP=VARCHAR2, DBMS=V7 instead

gcc -I/home/oracle/oracle/product/10.2.0/client_1/precomp/public -I. -c conn.c

gcc -I/home/oracle/oracle/product/10.2.0/client_1/precomp/public -I. -o conn conn.o -L/home/oracle/oracle/product/10.2.0/client_1/lib -L/home/oracle/oracle/product/10.2.0/client_1/rdbms/lib -L/home/oracle/oracle/product/10.2.0/client_1/precomp/lib -L/home/oracle/oracle/product/10.2.0/client_1/sqlplus/lib
-L/home/oracle/oracle/product/10.2.0/client_1/otrace/lib -lclntsh -lm

rm conn.c

[cardc@cardC b]$ ./conn

Success!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: