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

news/2024/6/19 2:45:03 标签: oracle, 数据库, linux, makefile, sql, descriptor
Oralce数据库开发(二).Linux下配置使用ProC

一、摘要
    上文简单介绍了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)。 

http://www.niftyadmin.cn/n/1089652.html

相关文章

Oracle数据库开发(一) Windows下配置使用ProC

Oracle数据库开发(一).Windows下配置使用ProC一、摘要ProC是Oracle数据库提供的开发接口&#xff0c;支持多种语言。ProC虽然调试维护起来十分不便&#xff0c;但是依靠其结构化清晰的嵌入式SQL&#xff0c;也成为了C/C语言访问控制数据库的常用方式。本文首先介绍Windows平台下…

iphone照片删掉又出现_亲测有用:苹果/iPhone手机相册照片突然全部消失了,一张都没有了,如何恢复?...

亲测有用&#xff0c;但不敢保证每个人这样操作都有用。前些天&#xff0c;朋友跟我说她的iPhone抽风了&#xff0c;无缘无故手机里的照片全消失了&#xff0c;即相机胶卷和最近删除都显示为0。现拍几张照片&#xff0c;相册里也没有显示&#xff0c;万能操作重启也没能解决。我…

linux下c语言获取当前时间

和时间有关的函数定义在头文件”time.h”中 常用函数: time_t time(time_t *t); 函数说明&#xff1a;此函数会返回从公元 1970 年1 月1 日的UTC 时间从0 时0 分0 秒算起到现在所经过的秒数。如果t 并非空指针的话&#xff0c;此函数也会将返回值存到t 指针所指的内存。 char …

Oracle数据库开发(三) Pro*C/C++的编译参数

Oracle Database Development (4). Example Makefile for Pro*C<本文主要介绍Linux下使用Makefile编译ProC程序的方法>It is a pity that there is a few aritcle written in Chinese which talking about the material method of Makefile for Pro*C/C .Maybe its not d…

手机能给电脑装系统吗_新电脑怎么装系统

大家好&#xff0c;我是小白一键重装软件的客服。新电脑怎么装系统呢&#xff1f;很多小伙伴喜欢自己购买电脑主机配件DIY组装电脑&#xff0c;那么主机配置好后硬盘没有操作系统&#xff0c;也是没办法使用电脑&#xff0c;如何给新电脑安装系统呢&#xff1f;下面小白系统教你…

kali 2.0 安装VMware Tools

虽然这不是一个多么困难的&#xff0c;或者有技术含量的文章&#xff0c;但是看到身边确实有不少新手朋友会遇到这个问题来求助&#xff0c;我百度了一下&#xff0c;要么讲的太复杂&#xff0c;要么实施起来存在问题&#xff0c;清晰、简单的文章确实没看到&#xff0c;所以写…

arraylist排序_面试必会排序算法(1)java 实现冒泡排序讲解

创作目的最近想系统整理一下数据库的索引系列&#xff0c;然后就牵扯到了二分查找&#xff0c;二分查找的前提需要排序。排序工作中我们用的很多&#xff0c;不过很少去关心实现&#xff1b;面试中&#xff0c;排序的出场率非常高&#xff0c;以此来验证大家是否懂得“算法”。…

面试笔记3

&#xff08;1&#xff09;快排是递归排序&#xff0c;为啥排序效率也挺高&#xff1f;快排是通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分数据分别进行快速排序&#x…