您的位置:首页 > 数据库 > Oracle

Pro*c在oracle10g上的第一个入门测试程序

2007-05-20 19:11 633 查看
Pro*c在oracle10g上的第一个入门测试程序

开发运行环境
oracle10g 10.2.0 fedora core 6.0
oracle10g 10.2.0 fedora core 5.0
windows xp sp2
gcc
proc

1 makefile


LIBPATH= -L$(ORACLE_HOME)/lib/


LIBS=-lclntsh `cat $(ORACLE_HOME)/lib/sysliblist` -ldl –lm




CC=gcc


CFLAGS= -o




test:test.pc


proc parse=no iname=test.pc include=$(ORACLE_HOME)/precomp/public


$(CC) $(CFLAGS) $@ $@.c -I$(ORACLE_HOME)/precomp/public -L$(ORACLE_HOME)/lib -lclntsh -lclient8 $(LIBPATH) $(LIBS)


rm tp??????



[align=left]避免PCC-S-02015, unabletoopenincludefile的问题-->parse=no,主要检查$HOME/precomp/admin/pcscfg.cfg 内容如下(多线程问题): [/align]
sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc-lib/i386-redh
at-linux/3.2.3/include)
include=用户定义的库头文件目录或者要引用的头文件目录
ltype=short

2 本机程序(应用程序和数据库服务器同一台机)
test.pc


#include <stdio.h>




EXEC SQL INCLUDE SQLCA;




int main(void)




...{


EXEC SQL BEGIN DECLARE SECTION;


VARCHAR user[20],pass[20],tnsname[20];


char ename[10];


int empno;


EXEC SQL END DECLARE SECTION;




int i=0;




strcpy(user.arr,"scott");


user.len=(unsigned short)strlen((char *)user.arr);


strcpy(pass.arr,"tiger");


pass.len=(unsigned short)strlen((char *)pass.arr);


strcpy(tnsname.arr,"MYDATA");


tnsname.len=(unsigned short)strlen((char *)tnsname.arr);




EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :tnsname;


if( sqlca.sqlcode < 0)




...{


printf(“ connect error ”);


EXEC SQL commit work release;


return -1;


}




EXEC SQL declare emp_cursor cursor for


select empno,ename from scott.emp;


if( sqlca.sqlcode < 0)




...{


printf(“ declare error ”);


EXEC SQL commit work release;


return -1;


}


EXEC SQL open emp_cursor;


if( sqlca.sqlcode < 0)




...{


printf(“ open error ”);


EXEC SQL commit work release;


return -1;


}




EXEC SQL WHENEVER NOT FOUND DO break;




while(1)




...{


EXEC SQL fetch emp_cursor into :empno,:ename;


if( sqlca.sqlcode < 0)




...{


printf(“ fetch error:[%s] ”, sqlca.sqlerrm.sqlerrmc);;


EXEC SQL commit work release;


return -1;


}


printf("The empno %d's name is %s ",empno,ename);


i=i+1;


}




printf("Yeah!We get %d records ",i);




EXEC SQL close emp_cursor;


if( sqlca.sqlcode < 0)




...{


printf(“ close error ”);


EXEC SQL commit work release;


return -1;


}


EXEC SQL commit work release;


return 0;


}



[align=left] [/align]
[align=left] tnsnames.ora[/align]
[align=left] [/align]
[align=left]# Generated by Oracle configuration tools.[/align]
[align=left] [/align]


MYDATA =


(DESCRIPTION =


(ADDRESS = (PROTOCOL = TCP)(HOST = zhang.sirius.com)(PORT = 1521))


(CONNECT_DATA =


(SERVER = DEDICATED)


(SERVICE_NAME = MyData)


)


)




EXTPROC_CONNECTION_DATA =


(DESCRIPTION =


(ADDRESS_LIST =


(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))


)


(CONNECT_DATA =


(SID = PLSExtProc)


(PRESENTATION = RO)


)


)



3 c/s结构
Client(fc5.0)应用程序如上
将strcpy(tnsname.arr,"MYDATA");
改为strcpy(tnsname.arr, “MYDATA_FERTILAND”)
此时修改客户端的$ORACLE_HOME/network/admin/tnsnames.ora
Makefile沿用上面的


# Generated by Oracle configuration tools.


MYDATA =


(DESCRIPTION =


(ADDRESS = (PROTOCOL = TCP)(HOST = zhang.sirius.com)(PORT = 1521))


(CONNECT_DATA =


(SERVER = DEDICATED)


(SERVICE_NAME = MyData)


)


)




MYDATA_FERTILAND =


(DESCRIPTION =


(ADDRESS = (PROTOCOL = TCP)(HOST = fertiland.sirius.com)(PORT = 1521))


(CONNECT_DATA =


(SERVER = DEDICATED)


(SERVICE_NAME = MyData)


)


)




EXTPROC_CONNECTION_DATA =


(DESCRIPTION =


(ADDRESS_LIST =


(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))


)


(CONNECT_DATA =


(SID = PLSExtProc)


(PRESENTATION = RO)


)


)



4
VC下利用Pro*C开发Oracle接口http://www.linuxmine.com/51925.html

程序参考
http://blog.csdn.net/NinGoo/archive/2005/10/12/501053.aspx 期望没冒犯您,在此谢过.如觉不妥,邮件通知.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: