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

  
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
??????
 
避免 PCC-S-02015 , unable to open include file的问题-->parse=no,主要检查$HOME/precomp/admin/pcscfg.cfg 内容如下(多线程问题): 
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;
}

 
 
  tnsnames.ora
 
# Generated by Oracle configuration tools.
 
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  期望没冒犯您,在此谢过.如觉不妥,邮件通知.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值