网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle数据库异构服务原理及实例.
.Oracle中利用EXP/IMP工具实现数据.
.Oracle数据库使用及命名规则的详.
.oracle的系统和对象权限.
.关于shared pool的深入探讨(一).
.ORACLE在HP-UX下的系列问题处理(.
.ORACLE入门之APACHE WEB SERVER管.
.如何利用oracle 10g的列值掩码技.
.在Linux下管理磁盘.
.在 Oracle10g 上构建 PL/SQL Web.
.Oracle数据操作和控制语言详解 (.
.Oracle备份与恢复案例二.
.Oracle 数据表分区的策略.
.Oracle高级技巧.
.深入了解Oracle数据字典.
.如何在sqlserver2000中实现oracl.
.关于Oracle数据库各种存储形式的.
.理解和使用Oracle 8i分析工具-L.
.设置 XFree86 ( XF86Config ).
.Oracle Database 10g:自动共享内.

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

发表日期:2008-2-9


一、提要 上文简单介绍了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中压缩数据节省空间和提高速度 人气:1145
下一篇:Result Sets from Stored Procedures In Oracle 人气:676
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐