动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
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 for NT系统实用工具介绍.
.Oracle 8i概述.
.linux日志管理(二).
.ORACLE之APACHE虚拟服务器设置.
.vsftpd-1.1.3配制实例之五:VIRT.
.oracle数据库PL/SQL序列(组图).
.ORACLE SQL性能优化系列(一).
.oracle笔记-动态SQL.
.Linux 进程调度原理.
.ORACLE 面试问题-技术篇(1).
.Oracle 9i 在Linux 下的安装 (上).
.Oracle 数据表分区的策略.
.RedHatLinux AS3 U2 安装 oracle.
.在Windows 2000下优化Oracle9i性.
.VC++ Oracle 开发入门教程.
.用SQL解决有向图问题.
.oracle数据库备份与恢复 a piece.
.搭建Oracle高可用数据库环境.
.JDBC+Hibernate将Blob数据写入Or.
.oracle_sid,server_name,网络连接.

如何在Oracle/2000中调用Windows API函数

发表日期:2008-2-9 |



  OracleDeveloper/2000是Oracle的微机开发工具,由于它与Oracle数据库的紧密连接,比用PowerBuilder或其它高级语言采用ODBC与Oracle的连接享有得天独厚的优点,越来越在Windows95和WindowsNT平台上得到广泛应用,笔者在用其进行程序设计时感到,既然是在Windows平台上开发程序, 假如能在其中应用一些WindowsAPI函数,将使Developer/2000有如虎添翼的感觉,可以大大弥补它与底层操作系统的联系能力差、控制实时硬件设备功能差的缺点,开发出集成性更好的应用程序。
  
  所有用第三方语言编写的子程序对Developer/2000都称为外部函数,WindowsAPI函数也是外部函数。这些外部函数必须包含在一个动态库中。例如WINDOWS操作系统下的动态链接库或UNIX系统下的共享库等。Developer/2000通过为每一个外部函数产生一个PL/SQL接口,它使用PL/SQL的语法,在程序中调用这一接口程序就可以激活这一外部函数。
  
  对一个外部函数产生一个PL/SQL接口,需要用到内建软件包ORA-FFI,它包含一些PL/SQL的子程序用来对外部函数生成PL/SQL接口,实际操作时可以用ProcedureBuilder产生一个程序库,在程序库中建立一个程序包(Package),在这个包中实现对外部函数建立连接。下面介绍这一过程的具体步骤:
  
  1.初始化外部函数
  就是说明包含外部函数的动态链接库的位置,并从中分离出外部函数的原型,并将外部函数中主语言的数据类型和PL/SQL数据类型做一一对应的匹配。这是在包体(PackageBody)中进行的。具体分以下几步:
  
  (1)用OQA_FFI.LOAD_LIBRARY得到包含外部函数的动态链接库的库柄,此时需提供动态链接库的名字和位置。
  
  (2)用ORA_FFI.REGISTER_FUNCTION得到外部函数的函数柄,这时需提供动态链接库的库柄和外部函数名。
  
  (3)用ORA_FFI.REGISTER_PARAMETER来注册外部函数的参数类型,对每一个参数都要提供它的外部函数柄和相应的PL/SQL数据类型。参数注册的顺序必须与它们出现在外部函数原型中的顺序一致。
  
  (4)用ORA_FFI.REGISTER_RETURN来注册外部函数的返回值类型,这时需要提供它的外部函数柄和相应的PL/SQL数据类型。
  
  2.将外部函数和一个PL/SQL子程序相关联
  一个和外部函数建立关联的PL/SQL子程序,实际上指明了外部函数的内存地址,每次调用这个子程序,实际上是调用与它相对应的外部函数。具体步骤为:
  
  (1)用ORA_FFI.FIND_FUNCTION或ORA_FFI.REGISTER_FUNCTION得到一个函数柄。
  
  (2)在PL/SQL包体的声明部分,定义一个PL/SQL子程序,它的第一个参数是类型为ORA_FFI.FUNCHANDLETYPE,接下来是依次对应外部函数参数的PL/SQL数据类型的参数。
  
  (3)在这个PL/SQL子程序中加入一个PRAGMA接口。PRAGMA声明就是通过将控制转到一个内存地址,来激活这个外部函数。
  
  3.生成一个模拟外部函数的原型的PL/SQL子程序。
  这个子程序就是用户可见的外部函数的PL/SQL接口,用户按照它的参数类型和返回值类型来使用外部函数,具体步骤为:
  
  (1)在包体的声明部分,定义一个PL/SQL子程序,它的参数和返回值是和外部函数对应的PL/SQL类型。这就是模拟外部函数原型的一个子程序。
  
  (2)在这个子程序中调用与上步生成的与外部函数相关联的PL/SQL子程序。
  
  (3)在PL/SQL包的说明(PackageSpefication)部分,输入这个PL/SQL子程序的原型。
  
  下面是一个完整的为WindowsAPI函数winexec建立PL/SQL接口的例子:
  
  PACKAGEWinExecIS
  FUNCTIONWinExec(ExecfileINVARCHAR2,
  commandINPLS_INTEGER)
  RETURNPLS_INTEGER;
  END;/*在包说明部分,是模拟外部
  函数原型的PL/SQL函数原型说明*/
  PACKAGEBODYWinExecIS
  lh_USERora_ffi.libHandleType;/*定义库柄类型变量*/
  fh_WinExecora_ffi.funcHandleType;/*定义函数柄类型变量*/
  
  FUNCTIONi_WinExec(funcHandleINora_ffi.funcHandleType,
  ExecfileINOUTVARCHAR2,
  commandINPLS_INTEGER)
  RETURNPLS_INTEGER;
  
  PRAGMAINTERFACE(C,i_WinExec,11265);
  /*步骤2将一个PL/SQL子程序与外部函数相关联*/
  
  FUNCTIONWinExec(ExecfileINVARCHAR2,
  commandINPLS_INTEGER)
  RETURNPLS_INTEGER
  IS
  execfile_lVARCHAR2(512):=Execfile;
  rcPLS_INTEGER;
  BEGIN
  rc:=i_WinExec(fh_WinExec,
  execfile_l,
  command);
  
  RETURN(rc);
  END;
  /*步骤3中PL/SQL模拟函数的定义,
  它实际上就是调用步骤2中与外部函数建立关联的那个函数*/
  BEGIN
  BEGIN
  lh_USER:=ora_ffi.find_library('Kernel32.dll');
  EXCEPTIONWHENora_ffi.FFI_ERRORTHEN
  lh_USER:=ora_ffi.load_library(NULL,'kernel32.dll');
  END;/*得到动态链接库的库柄*/
  
  fh_WinExec:=ora_ffi.register_function
  (lh_USER,'WinExec',ora_ffi.PASCAL_STD);
  /*得到外部函数的函数柄*/
  ora_ffi.register_parameter(fh_WinExec,
  ORA_FFI.C_CHAR_PTR);/*参数注册,原类型为LPCSTR*/
  ora_ffi.register_parameter(fh_WinExec,
  ORA_FFI.C_INT);/*参数注册,原类型为UINT*/
  
  ora_ffi.register_return(fh_WinExec,
  ORA_FFI.C_INT);/*返回值注册,原类型为BOOL*/
  
  ENDWinExec;
  
  可以将多个外部函数的PL/SQL接口放在一个包内。
要在Developer/2000的FormDesigner中使用这些外部函数,只要把包含这一程序包的程序库(.PLL)附加进来,使用包名.函数名就可激活这个外部函数。
  
  例如:WinExec.WinExec('c:\windows\notepad.exe',0)
  
  具体WindowsAPI函数数据类型和PL/SQL数据类型的转换可参照Developer/2000中ProcedureBuilder帮助文件中对ORA_FFI软件包的具体介绍。
上一篇:怎样制作可执行的java程序 人气:605
下一篇:开发基于Oracle7数据库的管理信息系统 人气:384
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-25 WikyBlog v1.7.0.1 多国语言版
2008-7-25 乐彼网上开店系统(56770 Eshop)
2008-7-25 赛特网站管理系统sitecms v3.6.0
2008-7-25 Modoer多功能点评系统 v1.0.1 Bu
2008-7-25 Shangducms Teamsuit! v1.1.0 开
2008-7-25 幻影动漫网视频系统(Ppdong) v1.
2008-7-25 acteecompany企业网站建设系统 v
2008-7-25 恒浪整合管理系统 ims v4.1 ACCE
2008-7-25 艺术图库系统 v1.0 beta
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号