Oracle 9I系统调用动态库功能示例与实现
需积分: 1 111 浏览量
更新于2024-09-19
收藏 3KB TXT 举报
本文档主要介绍了如何在Oracle数据库9i版本上实现调用动态库(如DLL)中的函数,以便在Linux或Windows环境下扩展应用程序。在9I之前,这种功能可能需要手动配置,但随着Oracle 10G及更高版本的内置支持,这个过程变得更加便捷。以下是核心步骤:
1. 权限设置:
- 首先,需要为用户`cdx`创建并授权,允许其连接、创建库、创建存储过程等操作:
- `createuser cdx identified by '123';`
- 授予`cdx`用户与操作系统交互的权限,例如:
- `grant connect to cdx;`
- `grant create library to cdx;`
- `grant create procedure to cdx;`
- 创建公共别名,使外部程序可以访问库:
- `create public synonym cdxpack for cdx.cdxpack;`
- 设置默认表空间和配额:
- `alter user cdx default tablespace users temporary tablespace temp;`
- `alter user cdx quota unlimited on users;`
2. 数据表创建:
- 定义一个用于记录命令运行日志的表,包括用户名称、运行日期、命令字符串、参数字符串和运行结果代码:
```sql
CREATE TABLE cdx.cmd_run_log (
usr_name VARCHAR2(50),
run_date DATE,
cmd_str VARCHAR2(50),
para_str VARCHAR2(50),
run_ret_code NUMBER(10)
);
```
3. C语言扩展:
- 在`extproc.c`文件中编写了一个C函数`RunSysCmd`,该函数接受命令字符串和参数字符串作为输入,执行操作系统命令:
- 定义一个命令字符串数组`CmdStr`,根据输入构建命令。
- 使用`system()`函数执行命令,并返回执行结果。
4. 编译和链接:
- 对C源代码进行编译,并链接到所需的库(如`linkmsvcrt.lib`),生成`extproc.dll`动态链接库:
```
cl -I. -L e:\extproc /LD extproc.c /link msvcrt.lib /nodefaultlib:libcmt /DLL
```
- 将编译后的动态库添加到Oracle环境中:
```sql
sqlplus cdx/123
...
CREATE OR REPLACE LIBRARY cdxlib IS 'e:\extproc\extproc.dll';
```
5. 创建包和函数:
- 在Oracle数据库中创建一个包`cdxpack`,包含名为`RunSysCmd`的函数,用于调用`RunSysCmd`函数:
```sql
CREATE OR REPLACE PACKAGE cdxpack AS
FUNCTION RunSysCmd(str IN CHAR, parastr IN CHAR) RETURN BINARY_INTEGER;
END cdxpack;
...
CREATE OR REPLACE PACKAGE BODY cdxpack AS
FUNCTION RunSysCmd(str IN CHAR, parastr IN CHAR) RETURN BINARY_INTEGER
AS LANGUAGE C NAME 'RunSysCmd(char*, char*)';
END cdxpack;
```
通过以上步骤,你可以在Oracle 9i环境下成功地为系统添加一个能够调用外部动态库函数的接口,这在处理需要外部工具支持的应用场景时非常有用。然而,随着Oracle版本升级,建议采用更现代的方法,利用Oracle的高级特性,如PL/SQL External Functions,以提高性能和安全性。
2019-08-17 上传
2017-12-31 上传
2009-02-21 上传
2021-10-01 上传
2017-10-08 上传
2010-09-14 上传
2021-10-10 上传
2022-04-29 上传
2024-04-18 上传
yanran_hill
- 粉丝: 34
- 资源: 7
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章