linux之家
linux之家-让学习更轻松

你的位置:首页>>Linux数据库知识>>Oracle数据库开发(二).Linux下配置使用ProC

Oracle数据库开发(二).Linux下配置使用ProC

发表时间:2007-9-23 上午 12:45:41浏览次数:

一、提要

    上文简单介绍了Windows下ProC配置开发,这次我们使用Linux平台再次配置Oracle ProC开发环境(RedHat Linux 9 + Oracle 92)。


    《ORACLE数据库开发(一).Windows下配置使用ProC》和《ORACLE数据库开发(二).Linux下配置使用ProC》这两篇文章的目的只是做一些基础介绍,至于Oracle ProC编译参数以及Linux下的ProC Makefile
相关内容,将再后续文章逐步引入。
    一言以弊之,先易后难。

二、数据库环境

    与Windows下十分类似,首先确认安装了组件,Oracle - Application Development - Pro C-C++ 。安装后会在$ORACLE_HOME/bin生成相应可执行文件,在$ORACLE_HOME/precomp/demo/proc下也会生成一些makefile文件和示例。

三、示例文件

    main.pc
    ---------------------------------------------------------

  #include "sqlca.h"
  #include <stdio.h>
  #include <string.h>
  #include <stdlib.h>
 
  void sql_error(char *msg)
  {
  printf("\n%s %s\n", msg,(char *)sqlca.sqlerrm.sqlerrmc);
  EXEC SQL ROLLBACK RELEASE;
  exit(0);
  }
 
  int main() {
 
  EXEC SQL INCLUDE sqlca;
  EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
  EXEC SQL WHENEVER SQLERROR DO sql_error(" <ERROR> ");
 
  EXEC SQL BEGIN DECLARE SECTION;
  VARCHAR oraCN[30];
  EXEC SQL END DECLARE SECTION;
 
  strcpy(oraCN.arr,"system/manager@linuxdb");
  oraCN.len = strlen(oraCN.arr);
  oraCN.arr[oraCN.len]=''\0'';
 
  EXEC SQL CONNECT :oraCN;
  printf("\n [OK Connected!] ");
 
  return 0;
 
  }
 


  代码其实是Windows的原版。
 
 
四、编译运行

    无需修改任何参数文件,即安装后直接创建main.pc,执行如下命令:
   
  $ proc parse=none iname=main.pc
 
  Pro*C/C++: Release 9.2.0.4.0 - Production on Thu Jun 7 14:17:05 2007
 
  Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
 
  System default option values taken from: /home/ora/ora9/oracle/precomp/admin/pcscfg.cfg
 
  $ gcc -g -o main main.c -I/home/ora/ora9/oracle/precomp/public -L/home/ora/ora9/oracle/lib -lclntsh
 
  $ ./main
 
   <ERROR>  ORA-12541: TNS:no listener
  
   成功编译运行,这里也可以使用《ProC动态SQL示例(第1,2,3种方法)》一文中的示例,将//注释全部替换为空,即可编译。
    http://blog.csdn.net/liwei_cmg/archive/2006/05/29/759963.aspx
    不过会有告警提示:
  /tmp/ccC7E6qe.o(.text+0xea): In function `db_connect'':
  /home/ora/develop/src/db.c:385: the `gets'' function is dangerous and should not be used.
   
    这个是由于使用了gets函数所致,见gets的man手册:
   
BUGS
       Never use gets().  Because it is impossible to tell without knowing the data in advance how many  characters  gets()  will  read,  and  because gets() will continue to store characters past the end of the buffer, it is extremely dangerous to use.  It has  been  used  to  break  computer security.  Use fgets() instead.

       It  is  not  advisable  to  mix calls to input functions from the stdio library with low - level calls to read() for the file descriptor  asso-ciated  with  the  input stream; the results will be undefined and very probably not what you want.
      
    要解决这个问题,可以使用scanf函数替换gets,获取屏幕输入。如 scanf("%s",cmd)。

读者体会
暂无回复
姓名:
评论内容:
     
热点导读
Oracle数据库开发(二
红帽Linux获美国政府最
Linux操作系统安全配置
如何用Linux Live
物理隔离 Linux如何贯
用SRP建立安全的Linu
Linux安全攻略 了解系
Linux安全攻略 服务器
微软要用数据证明Vista
用LVS在Linux上搭建
Linux操作系统安装VM
下载工具介绍 aMule在
Linux操作系统中安装E
Linux操作系统下网络互
Linux应用问答系列之硬
Linux系统下设置用户登
Apache2.0.48
在Linux系统下面架设S
Debian Linux下
Squid实现反向代理并且
Linux操作系统下SAM
高效配置Linux代理服务
用VSFTPD搭建FTP服
sendmail+squi
Ubuntu Linux上
Linux系统上把PHP编
Red Hat Linux
Linux系统 2.4和2
让远程Windows系统访
Linux操作系统文件链接
Copyright 2006-2007 linux77.com Inc. All Rights Reserved
Emai:skyzznj@126.com