ORACLE数据库API接口函数设计说明
- 格式:doc
- 大小:34.50 KB
- 文档页数:7
pyodbc连接oracle 的connect用法-概述说明以及解释1.引言1.1 概述在现代软件开发中,使用数据库是非常常见的需求。
而对于Python 开发人员来说,连接不同类型的数据库是必不可少的技能之一。
本文将重点介绍如何使用pyodbc库来连接Oracle数据库,具体来说是通过connect函数的用法。
在介绍pyodbc连接Oracle数据库的用法之前,我们首先需要了解pyodbc的基本概念和特点。
pyodbc是一个Python对ODBC(Open Database Connectivity)的封装库,它允许Python程序与SQL数据库进行交互,包括连接数据库、执行SQL语句以及获取查询结果等操作。
因此,通过pyodbc可以实现Python程序与Oracle数据库之间的无缝交互。
本文将以建立连接为例,详细介绍pyodbc库中connect函数的用法,帮助读者快速掌握如何在Python中连接Oracle数据库,从而为后续的数据操作提供基础支持。
希望本文能够帮助读者更加深入地了解pyodbc 库的使用方法,从而提升数据库操作的效率和准确性。
"1.2 文章结构"部分介绍了整篇文章的结构安排,包括引言、正文和结论三个部分。
引言部分主要说明了文章的概述、结构和目的,正文部分将详细介绍pyodbc的概念和Oracle数据库连接的方法,以及pyodbc 中connect函数的具体用法。
结论部分将总结文章的重点内容,并给出使用建议和未来的展望。
整篇文章的结构清晰明了,有助于读者快速了解文章内容,并对相关知识有一个系统性的了解。
1.3 目的本篇文章旨在介绍如何使用pyodbc库连接Oracle数据库,并重点介绍了connect函数的用法。
通过阅读本文,读者将了解到pyodbc库的基本概念和特点,以及如何在Python中通过pyodbc实现与Oracle数据库的连接。
除此之外,文章还将详细说明connect函数的用法,帮助读者更好地理解如何在代码中使用这一函数来实现数据库连接操作。
自定义聚合函数,分析函数--from GTA Aaron最近做一数据项目要用到连乘的功能,而Oracle数据库里没有这样的预定义聚合函数,当然利用数据库已有的函数进行数学运算也可以达到这个功能,如:select exp(sum(ln(field_name))) from table_name;不过今天的重点不是讲这个数学公式,而是如何自己创建聚合函数,实现自己想要的功能。
很幸运Oracle 允许用户自定义聚合函数,提供了相关接口,LZ研究了下,留贴共享。
首先介绍聚合函数接口:用户可以通过实现Oracle的Extensibility Framework中的ODCIAggregate interface 来创建自定义聚合函数,而且自定义的聚合函数跟内建的聚合函数用法上没有差别。
通过实现ODCIAggregate rountines来创建自定义的聚合函数。
可以通过定义一个对象类型(Object Type),然后在这个类型内部实现ODCIAggregate 接口函数(routines),可以用任何一种Oracle支持的语言来实现这些接口函数,比如C/C++, JAVA, PL/SQL等。
在这个Object Type定义之后,相应的接口函数也都在该Object Type Body内部实现之后,就可以通过CREATE FUNCTION语句来创建自定义的聚合函数了。
每个自定义的聚合函数需要实现4个ODCIAggregate 接口函数,这些函数定义了任何一个聚合函数内部需要实现的操作:1. 自定义聚合函数初始化操作,从这儿开始一个聚合函数。
初始化的聚合环境(aggregation context)会以对象实例(object type instance)传回给oracle.static function ODCIAggregateInitialize(var IN OUT agg_type ) return number 2. 自定义聚合函数,最主要的步骤,这个函数定义我们的聚合函数具体做什么操作,self 为当前聚合函数的指针,用来与前面的计算结果进行关联。
Oracle创建函数和过程第一篇:Oracle创建函数和过程ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)继上篇:ORACLE PL/SQL编程之八:把触发器说透得到了大家的强力支持,感谢。
接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的。
本篇主要内容如下:6.1 引言 6.2 创建函数 6.3 存储过程 6.3.1 创建过程 6.3.2 调用存储过程 6.3.3 AUTHID6.3.4 PRAGMA AUTONOMOUS_TRANSACTION 6.3.5 开发存储过程步骤 6.3.6 删除过程和函数 6.3.7 过程与函数的比较6.1 引言过程与函数(另外还有包与触发器)是命名的PL/SQL块(也是用户的方案对象),被编译后存储在数据库中,以备执行。
因此,其它PL/SQL块可以按名称来使用他们。
所以,可以将商业逻辑、企业规则写成函数或过程保存到数据库中,以便共享。
过程和函数统称为PL/SQL子程序,他们是被命名的PL/SQL块,均存储在数据库中,并通过输入、输出参数或输入/输出参数与其调用者交换信息。
过程和函数的唯一区别是函数总向调用者返回数据,而过程则不返回数据。
在本节中,主要介绍:1.创建存储过程和函数。
2.正确使用系统级的异常处理和用户定义的异常处理。
3.建立和管理存储过程和函数。
6.2 创建函数1.创建函数语法如下:CREATE [OR REPLACE] FUNCTION function_name(arg1 [ { IN | OUT | IN OUT }] type1 [DEFAULT value1], [arg2 [ { IN | OUT | INOUT }] type2 [DEFAULT value1]],......[argn [ { IN | OUT | IN OUT }] typen [DEFAULT valuen]])[ AUTHID DEFINER | CURRENT_USER ] RETURN return_type IS | AS<类型.变量的声明部分> BEGIN执行部分RETURN expression EXCEPTION 异常处理部分END function_name;λIN,OUT,IN OUT是形参的模式。
oracle 自定义函数入门博客分类:oracle用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序。
调用时如同系统函数一样,如max(value)函数,其中,value被称为参数。
函数参数有3种类型。
IN 参数类型:表示输入给函数的参数。
OUT 参数类型:表示参数在函数中被赋值,可以传给函数调用程序。
IN OUT参数类型:表示参数既可以传值也可以被赋值。
1、语法格式:SQL语法方式创建的语法格式为:CREATE OR REPLACE FUNCTION function_name /*函数名称*/(Parameter_name1,mode1 datatype1,/*参数定义部分*/Parameter_name2,mode2 datatype2,Parameter_name3,mode3 datatype3…)RETURN return_datatype/*定义返回值类型*/IS/ASBEGINFunction_body/*函数体部分*/RETURN scalar_expression /*返回语句*/END function_name;说明:function_name::用户定义的函数名。
函数名必须符合标示符的定义规则,对其所有者来说,该名在数据库中是唯一的。
parameter:用户定义的参数。
用户可以定义一个或多个参数。
mode:参数类型。
datatype:用户定义参数的数据类型。
return_type::用户返回值的数据类型。
函数返回scalar_expression表达式的值,function_body函数体由pl/sql语句构成。
2、示例函数代码:create or replace function T01001_countreturn numberiscount_T01001 number;beginselect count(*) into count_T01001 from T01001;return(count_T01001);end T01001_count; --记得一定要打分号调用:declarei number;begini:=T01001_count();dbms_output.put_line(to_char(i));end;--记得一定要打分号注意:(1)如果函数没有参数,那么函数名后不应该要括号;(2)创建函数的时候end后面一定要记得写函数名--没有参数的函数create or replace function get_user return varchar2 isv_user varchar2(50);beginselect username into v_user from user_users;return v_user;end get_user;--测试方法一select get_user from dual;方法二SQL> var v_name varchar2(50)SQL> exec :v_name:=get_user;PL/SQL 过程已成功完成。
Oracle API----字符函数----字符函数主要用于修改字符列。
这些函数接受字符输入,返回字符或数字值。
Oracle 提供的一些字符函数如下。
1. CONCAT (char1, char2)返回连接“char2”的“char1”。
示例2. INITCAP(string)将“string”的字符转成大写。
示例3. LOWER (string)将“string”转成小写。
示例4. LPAD(char1,n [,char2])返回“char1”,左起由“char2”中的字符补充到“n”个字符长。
如果“char1”比“n”长,则函数返回“char1”的前“n”个字符。
示例5. LTRIM(string,trim_set)从左边删除字符,此处“string”是数据库的列,或者是字面字符串,而“trim_set”是我们要去掉的字符的集合。
示例6. REPLACE(string, if, then)用0 或其他字符代替字符串中的字符。
“if”是字符或字符串,对于每个出现在“string”中的“if”,都用“then”的内容代替。
示例7. RPAD(char1, n [,char2])返回“char1”,右侧用“char2”中的字符补充到“n”个字符长。
如果“char1”比“n”长,则函数返回“char1”的前“n”个字符。
示例8. RTRIM(string,trim_set)从右侧删除字符,此处“string”是数据库的列,或者是字面字符串,而“trim_set”是我们要去掉的字符的集合。
示例9. SOUNDEX(char)返回包含“char”的表意字符的字符串。
它允许比较英语中拼写不同而发音类似的字。
示例10. SUBSTR(string, start [,count])返回“string”中截取的一部分。
该命令截取“string”的一个子集,从“start”位置开始,持续“count”个字符。
如果我们不指定“count”,则从“start”开始截取到“string”的尾部。
ORACLE函数大全SQL中的单记录函数1.ASCII返回与指定的字符对应的十进制数;SQL〉 select ascii('A')A,ascii(’a') a,ascii('0’) zero,ascii(' ') space from dual;A A ZERO SPACE————-——-— -—---———- ---—----- ---————-—65 97 48 322.CHR给出整数,返回对应的字符;SQL〉 select chr(54740) zhao,chr(65) chr65 from dual;ZH C—— -赵 A3.CONCAT连接两个字符串;SQL> select concat('010—’,'88888888')||'转23’高乾竞电话 from dual;高乾竞电话—-——-———-—--——-—010—88888888转234.INITCAP返回字符串并将字符串的第一个字母变为大写;SQL〉 select initcap('smith’) upp from dual;UPP—————Smith5.INSTR(C1,C2,I,J)在一个字符串中搜索指定的字符,返回发现指定的字符的位置;C1 被搜索的字符串C2 希望搜索的字符串I 搜索的开始位置,默认为1J 出现的位置,默认为1SQL> select instr(’oracle traning’,’ra',1,2) instring from dual;INSTRING—-—------96.LENGTH返回字符串的长度;SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;NAME LENGTH(NAME) ADDR LENGTH(ADDR) SALLENGTH(TO_CHAR(SAL))————-———---————-—- —--——---——----—- -———--—-—-—— ----———-————----—-——--—--—---高乾竞 3 北京市海锭区 6 9999.99 77。
ORACLE常用函数功能演示文档撰写:孟祥新写在前面:ORACLE内置函数,相当于C语言中的库函数,提供了常规数据库编程中所需的绝大多数基本功能,并且通过函数的组合或嵌套使用,可以发挥其强大的功能。
由于这些内置函数都是由ORACLE公司的编程大家所写,而且其执行代码是内嵌在ORACLE数据库系统中的,因此其执行效率极高。
在数据库编程中能广泛使用ORACLE所提供的内置函数,将大大提高程序代码的执行效率。
“站在高人的肩膀上,将使你变得更高”。
演示之前的环境设置:为了在SQL*PLUS中直观地显示函数返回的结果,我将“头”信息先屏蔽掉。
操作如下:一、单行函数1.数值函数(1)三角函数①SIN、ASIN、SINH(正弦、反正弦、双曲正弦)②COS、ACOS、COSH(余弦、反余弦、双曲余弦)③TAN、ATAN、TANH(正切、反正切,双曲正切)(2)幂、方根及对数运算函数①POWER(m, n)(取m的n次幂)②SQRT(n)(取n的平方根)③EXP(n)(取自然对数底e的n次方根)④LN(n)(取n的自然对数)⑤LOG(m, n)(取以m为底n的对数)以上函数功能演示如下:(3)数值处理函数①ABS(n)(取绝对值)②SIGN(n)(符号函数)③CEIL(n)(取不小于n的最小整数)④FLOOR(n)(取不大于n的最大整数)⑤ROUND(n, [m])(按m精度对n进行4舍5入)⑥TRUNC(n, [m])(按m精度对n进行截取)⑦MOD(m, n)(取m除以n的余数)以上函数功能演示如下:2.字符处理函数(1)对字符串的大小写处理的函数①INITCAP(功能:将字符串中每个单词的首字母,变换为大写。
)②UPPER(功能:将字符串中的所有字母,转换为大写。
)③LOWER(功能:将字符串中的所有字母,转换为小写。
)以上函数功能演示如下:(2)对字符串进行处理的函数①CONCAT(字符串连接函数,也可用|| 替代)功能演示如下:②ASCII(取字符的编码)③CHR(将编码转换为对应的字符)以上函数功能演示如下:④LTRIM(去除左侧空格/指定字符)⑤RTRIM(去除右侧空格/指定字符)⑥TRIM(去除两侧的空格/去除指定字符)以上函数去除空格功能演示如下:以上函数去除指定字符功能演示如下:请注意:在用TRIM去除字符串中指定字符(非空格)时的特殊用法。
Oracle是一种常用的关系型数据库管理系统,它提供了丰富的函数和特性来支持开发人员创建有效的数据库应用程序。
其中,返回表类型的自定义函数是一种非常有用的功能,可以帮助开发人员简化复杂的查询,并方便地使用查询结果进行进一步的处理和分析。
在Oracle中,表类型是一种用户定义的复杂数据类型,可以包含多个字段,并且可以在查询中作为一种临时的数据结构来使用。
通过使用返回表类型的自定义函数,开发人员可以将复杂的查询逻辑封装到函数中,并且可以方便地在应用程序中调用这些函数来获取所需的数据。
下面我们将介绍如何在Oracle中创建和使用返回表类型的自定义函数。
1. 创建表类型在创建返回表类型的自定义函数之前,首先需要创建相应的表类型。
可以使用以下语句来创建一个包含多个字段的表类型:```sqlCREATE OR REPLACE TYPE person_type AS OBJECT (id NUMBER,name VARCHAR2(100),age NUMBER);```上面的语句创建了一个名为`person_type`的表类型,其中包含三个字段:`id`、`name`和`age`。
2. 创建自定义函数一旦表类型创建完成,接下来可以创建返回该表类型的自定义函数。
以下是一个简单的例子,演示了如何创建一个返回`person_type`表类型的自定义函数:```sqlCREATE OR REPLACE FUNCTION get_person_info RETURN person_typeISp person_type;BEGINSELECT person_type(id, name, age) INTO pFROM person_tableWHERE id = 1;RETURN p;END;```在上面的例子中,我们创建了一个名为`get_person_info`的自定义函数,该函数返回`person_type`表类型。
OCI学习资料--Oracle8及以后版本的OCI 1.简介Oracle调用接口(Oracle Call Interface)是一个让我们通过函数调用来访问Oracle数据库和控制SQL语句执行各个阶段的应用程序编程接口(API)。
OCI支持C和C++的数据类型、调用惯例、语法和语义。
1.1创建一个OCI应用程序我们编译和连接一个OCI程序的方法与编译和连接一个非数据库应用程序的方法相同。
不需要独立的预处理或者预编译步骤。
1.2OCI的组成部分OCI具有如下功能:·能够安全地支持大量用户的灵活的、多线程API集合。
·为管理数据库访问、处理SQL语句和管理Oracle数据库对象的SQL访问函数。
·管理Oracle类型的数据属性的数据类型映射和操作函数。
·不经SQL语句直接向数据库加载数据的数据加载函数。
1.3封装的接口所有的OCI函数使用的数据结构都以被称为句柄的不透明的接口之形式封装。
句柄是指向OCI库分配的保存着上下文信息、连接信息、错误信息或者关于SQL及PL/SQL的绑定信息的不透明指针。
客户端分配一定类型的句柄,通过已经定义好的接口来填充一个或者多个句柄,应用程序可以通过访问函数来访问句柄中包含的相关信息。
2.OCI基本编程这部分介绍OCI编程中涉及到的基本概念。
2.1OCI编程概要一个OCI应用程序的基本目标就是代表多个用户进行数据库操作。
OCI使用以下基本编程顺序:1.初始化OCI编程环境和线程。
2.分配必要的句柄,并且设置服务器连接和用户会话。
3.通过在服务器上执行SQL语句来交换数据,并且执行必要的应用程序数据处理。
4.执行准备好的语句或者准备即将要执行的语句。
5.终止用户会话并且断开服务器连接。
6.释放句柄。
图2-1显示了一个OCI应用程序的编程步骤。
图2-1这幅图及其所列出的步骤提供了一个OCI编程步骤的简单概括。
根据程序的功能,变化是完全可能发生的。
综合结算产品部技术专题研究功能规格说明书-OCI接口分册文档编号:ZHJS_BASELIB_V1.0文档信息分发FromTo* Action Types: Approve, Review, Inform, File, Action Required, Attend Meeting, Other (please specify) 文档变更历史Copyright © 2007 by 联创科技-综合结算产品部All rights reserved.Copyright © 2007 by 联创科技-综合结算产品部 (3)1OCI接口的用途介绍 (5)1.1.ORACLE调用接口(简称OCI) (5)1.2.OCI简介 (5)1.3.OCI 的主要优点 (6)2OCI使用相关介绍 (7)2.1. Oracle oci工具包说明: (7)2.2.OCI一些定义说明 (7)OCI的简介1 OCI接口的用途介绍1.1. ORACLE调用接口(简称OCI)ORACLE调用接口(Oracle Call Interface简称OCI)提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在第三代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。
1.2. OCI简介OCI(Oracle Call Interface)是ORACLE公司开发的一个应用程序开发工具,是一个通过访问Oracle数据库的服务器,控制各类SQL语句的执行,进而创建应用程序的的应用程序接口(API)。
它支持SQL所有的数据定义,数据操作,查询,事务管理等操作,支持C和C++的数据类型,调用,语法和语义。
它提供了一组可对Oracle数据库进行存取的接口子例程(函数)。
在普通的情况下,用户可以通过SQL和PL/SQL来访问数据库中的数据。
ORACLE数据库除了提供SQL和PL/SQL来访问数据库外,还提供了一个第三代程序设计语言的接口,用户可以通过C、COBOL、FORTRAN 等第三代语言来编程访问数据库。
综合结算产品部技术专题研究功能规格说明书-OCI接口分册文档编号:ZHJS_BASELIB_V1.0文档信息分发FromTo* Action Types: Approve, Review, Inform, File, Action Required, Attend Meeting, Other (please specify) 文档变更历史Copyright © 2007 by 联创科技-综合结算产品部All rights reserved.Copyright © 2007 by 联创科技-综合结算产品部 (3)1OCI接口的用途介绍 (5)1.1.ORACLE调用接口(简称OCI) (5)1.2.OCI简介 (5)1.3.OCI 的主要优点 (6)2OCI使用相关介绍 (7)2.1. Oracle oci工具包说明: (7)2.2.OCI一些定义说明 (7)OCI的简介1 OCI接口的用途介绍1.1. ORACLE调用接口(简称OCI)ORACLE调用接口(Oracle Call Interface简称OCI)提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在第三代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。
1.2. OCI简介OCI(Oracle Call Interface)是ORACLE公司开发的一个应用程序开发工具,是一个通过访问Oracle数据库的服务器,控制各类SQL语句的执行,进而创建应用程序的的应用程序接口(API)。
它支持SQL所有的数据定义,数据操作,查询,事务管理等操作,支持C和C++的数据类型,调用,语法和语义。
它提供了一组可对Oracle数据库进行存取的接口子例程(函数)。
在普通的情况下,用户可以通过SQL和PL/SQL来访问数据库中的数据。
ORACLE数据库除了提供SQL和PL/SQL来访问数据库外,还提供了一个第三代程序设计语言的接口,用户可以通过C、COBOL、FORTRAN 等第三代语言来编程访问数据库。
主题:Oracle API接口开发实例实践一、背景介绍在企业信息化系统中,API接口是非常重要的一部分。
Oracle作为一款领先的数据库系统,也提供了丰富的API接口开发工具和技术。
本文将通过实际案例,介绍Oracle API接口开发的实践经验和技巧。
二、Oracle API接口开发概述1. 什么是Oracle API接口?Oracle API接口是通过调用Oracle数据库中的程序单元来实现数据交换和业务逻辑处理的一种技术。
通过API接口,可以实现数据库与外部系统的数据交互,实现数据的增删改查操作,以及业务逻辑的执行。
2. Oracle API接口开发工具和技术Oracle提供了多种API接口开发工具和技术,如PL/SQL、Java API、RESTful API等。
开发人员可以根据具体的需求和场景选择合适的技术来进行API接口开发。
三、实例介绍以一个简单的用户信息管理系统为例,介绍如何通过Oracle API接口实现用户信息的增删改查操作。
1. 用户信息管理系统的需求假设我们有一个用户信息管理系统,需要实现以下功能:- 查询用户信息- 新增用户信息- 修改用户信息- 删除用户信息2. 数据库设计我们需要在Oracle数据库中创建一个用户信息表,包括用户ID、用户名、性别、芳龄等字段。
3. API接口开发针对用户信息管理系统的需求,我们可以通过PL/SQL语言编写API 接口,实现相应的功能。
编写查询用户信息的API接口,可以使用如下PL/SQL语句:```sqlCREATE OR REPLACE PROCEDURE get_user_info (userId IN NUMBER, userInfo OUT SYS_REFCURSOR) ASBEGINOPEN userInfo FORSELECT * FROM user_info WHERE user_id = userId; END;```类似地,可以编写新增、修改、删除用户信息的API接口。
ORACLE数据库API接口函数设计说明API接口函数使用示例:参见程序OCIDEMO.DSW//工程中不用在连接ociw32.lib只用xjoci.lib就行了。
假定:工程文件为newocidemo,所在目录为c:\newocidemo,newocidemo.exe 位于c:\newocidemo\debug下面使用步骤:1、将MyConnection.h;oratypes.h;ocidem.h;ocidfn.h;xioci.lib复制到c:\newocidemo下面2、将xioci.dll复制到c:\newocidemo\debug下面3、设置project 下的settings 下面的link 中的object/library modules: 为xjoci.lib4、在file中添加MyConnection.h,从而在class中会出现connection,cursor两个新类API接口函数类设计:CONNECTION类class connection{friend class cursor;public:BOOL IsConnected();connection();~connection();BOOL connect(char *username, char *password,char *sername);BOOL disconnect();void display_error() const;private:Lda_Def lda;ub1 hda[HDA_SIZE];enum conn_state{not_connected,connected};conn_state state;};BOOL connect(char *username, char *password,char *sername); 函数用途:connect函数建立OCI程序与ORACLE数据库的连接参数说明:char *username,--用户名char *password,--口令char *sername—主机字符串(数据库别名)。
1. 单行函数1.1 字符函数LOWER 使字符串小写;select LOWER('HeLp') from dual --->helpUPPER 使字符串大写;select UPPER('HeLp') from dual --->HELPINITCAP 使字符串的第一个字母大写,其它为小写select INITCAP('hELp') from dual --->HelpLENGTH 返回表达式中的字符串长度select LENGTH('hELP') from dual ---->4CONCAT 将值连接到一起(,对于此函数,只能使用2个参数)select CONCAT('Hello', 'World') from dual --->HelloWorldSUBSTR 抽取确定长度的字符串select SUBSTR('HelloWorld',1,5) from dual ---->HelloINSTR 查找指定字符的数字位置select INSTR('HelloWorld', 'W') from dual --->6LPAD 按右对齐填充字符串select LPAD(salary,10,'*') from dual --->*****24000RPAD 按左对齐填充字符串select RPAD(salary, 10, '*') from dual --->24000*****TRIM(leading|trailing|both,trim_character FROM trim_source) 从字符串中截去头部或者尾部的字符(或者头尾都截掉)(如果trim_character或trim_source是一个字符型文字值,则必须将它包含在单引号之内。
如何在Oracle Developer/2000 中调用Windows API 函数王莹(山东工业大学硕士研究生)---- Oracle Developer/2000 是Oracle 的微机开发工具,由于它与Oracle 数据库的紧密连接,比用Power Builder 或其它高级语言采用ODBC 与Oracle 的连接享有得天独厚的优点,越来越在Windows95 和WindowsNT 平台上得到广泛应用,笔者在用其进行程序设计时感到,既然是在Windows 平台上开发程序,如果能在其中应用一些Windows API 函数,将使Developer/2000 有如虎添翼的感觉,可以大大弥补它与底层操作系统的联系能力差、控制实时硬件设备功能差的缺点,开发出集成性更好的应用程序。
---- 所有用第三方语言编写的子程序对Developer/2000 都称为外部函数,Windows API 函数也是外部函数。
这些外部函数必须包含在一个动态库中。
例如WINDOWS 操作系统下的动态链接库或UNIX 系统下的共享库等。
Developer/2000 通过为每一个外部函数产生一个PL/SQL 接口,它使用PL/SQL 的语法,在程序中调用这一接口程序就可以激活这一外部函数。
---- 对一个外部函数产生一个PL/SQL 接口,需要用到内建软件包ORA-FFI,它包含一些PL/SQL 的子程序用来对外部函数生成PL/SQL 接口,实际操作时可以用Procedure Builder 产生一个程序库,在程序库中建立一个程序包(Package), 在这个包中实现对外部函数建立连接。
下面介绍这一过程的具体步骤:---- 1. 初始化外部函数---- 就是说明包含外部函数的动态链接库的位置,并从中分离出外部函数的原型,并将外部函数中主语言的数据类型和PL/SQL 数据类型做一一对应的匹配。
这是在包体(Package Body)中进行的。
Oracle数据库C++调用接口Oracle C++ Call Interface(OCCI)简介•OCCI是一种用于访问Oracle数据库的C++ API •OCCI是一组封装完善,易于使用的C++类和接口•为关系存取、O-R存取等提供了丰富的特性。
优点•用于关系存取数据库时,类似于JDBC,易学,易用。
基于标准C++,采用面向对象思想设计。
为应用程序设计提供了较高的效率和编程质量。
可用于C/S模式编程、中间件编写以及基于复杂对象的应用开发。
•Oracle将持续改进并为其增加更多功能。
特性•完整的SQL/PL SQL支持。
•为数量不断增长的用户与访问请求,提供了弹性选项。
•为用户自定义类型和C++自带类型之间的互操作提供无缝接口。
•支持Oracle中所有的数据类型和大对象类型(BLOB)。
•支持数据库元数据访问。
构建应用程序应用程序源文件(使用OCCI API ) OCCI API 头文件OCCI 头文件•occi.h•occiCommon.h•occiControl.h•occiData.h•occiObjects.h OCCI 库文件C++ 编译器链接器OCCI 库文件( 静态库或者动态库)•libocci.a•libocci.so/oraocci9.dll应用程序预备工作•下载OCCI库文件和SDK。
•将OCCI库文件拷贝到/usr/lib,解压SDK压缩文件包•为OCCI库文件做好文件链接:–ln -s libocci.so.11.1 libocci.so – ln -s libclntsh.so.11.1 libclntsh.so步骤一:初始化•OCCI应用程序的初始化是通过创建Environment类的对象来实现的。
•一个Environment类的对象实例包括:–应用程序模式:OBJECT/THREADED/MUTEXED etc–对象缓存设定–OCCI类对象堆空间•Environment是连接到远程数据库的基础。
⏹接口设计考虑的因素●此接口设计标准解决方案主要基于以下七个方面因素而设计。
根据外围系统到Oracle EBS数据传输的方向,我们把接口分为导入和导出两种类型。
针对这两种类型的接口,我们都把以下七点因素纳入接口设计方案。
◆传输机制◆数据文件校验◆数据内容校验◆数据修正◆数据比对◆数据清理◆数据监测跟踪⏹接口工作原理●在考虑数据交互安全性和可靠性的基础上,此接口设计方案对于外围系统与Oracle EBS之间的数据交互采用文件加密传输方式。
此方式已被广泛并成功地应用于众多Oracle EBS与外围系统的接口设计方案中。
⏹接口设计方案实施预先配置:●Oracle应用服务器预先为每个外围系统分配一个放置接口数据文件的文件夹,文件夹里面有infile、outfile、errfile、archfile 四个子文件夹,分别用于放置外围系统导入Oracle EBS的数据文件,Oracle EBS导出到外围系统的接口数据文件,校验或导入过程中发生错误的接口数据文件,导入成功后存档的接口数据文件。
● 在Oracle 数据库建立接口数据文件共用跟踪表,此表主要用于记录每个接口数据文件的文件名,导入/导出接口,数据文件处理状态。
● 在Oracle 数据库建立共用接口数据错误日志表,此表用于记录每个接口的详细错误信息。
● 开发客制化的共用数据文件完整性校验程序 ● 开发客制化的共用Oracle FTP 程序 ● 开发客制化的共用接口错误邮件通知程序⏹ Oracle EBS 导入接口● 导入接口是将外围系统的数据按照功能需求导入到Oracle EBS 不同模块的接口。
终止临时表数据处理并发邮件通知相关用户终止接口文件处理并发邮件通知相关用户终止接口程序并发邮件通知终止接口数据处理并发邮件通知相关用户⏹ Oracle EBS 导出接口● 导出接口是将Oracle EBS 不同模块的数据按照功能需求抽取然后导入到不同外围系统的接口。
ORACLE数据库API接口函数设计说明
API接口函数使用示例:
参见程序OCIDEMO.DSW
//工程中不用在连接ociw32.lib只用xjoci.lib就行了。
假定:
工程文件为newocidemo,所在目录为c:\newocidemo,newocidemo.exe 位于c:\newocidemo\debug下面
使用步骤:
1、将MyConnection.h;oratypes.h;ocidem.h;ocidfn.h;xioci.lib复制到c:\newocidemo下面
2、将xioci.dll复制到c:\newocidemo\debug下面
3、设置project 下的settings 下面的link 中的object/library modules: 为xjoci.lib
4、在file中添加MyConnection.h,从而在class中会出现connection,cursor两个新类
API接口函数类设计:
CONNECTION类
class connection
{
friend class cursor;
public:
BOOL IsConnected();
connection();
~connection();
BOOL connect(char *username, char *password,char *sername);
BOOL disconnect();
void display_error() const;
private:
Lda_Def lda;
ub1 hda[HDA_SIZE];
enum conn_state
{
not_connected,
connected
};
conn_state state;
};
BOOL connect(char *username, char *password,char *sername); 函数用途:connect函数建立OCI程序与ORACLE数据库的连接参数说明:char *username,--用户名
char *password,--口令
char *sername—主机字符串(数据库别名)。
返回值:连接成功返回TRUE,不成功返回FALSE
BOOL disconnect();
函数用途:disconnect函数断开与数据库的连接
参数说明:
返回值:断开成功返回TRUE,不成功返回FALSE
BOOL IsConnected ();
函数用途:IsConnected函数判断是否与数据库建立了连接。
参数说明:
返回值:有连接存在返回值为TRUE,没有连接返回值为FALSE void display_error() const;
函数用途:display_error当各个函数返回值为FALSE时,调用此函数可以显示错误信息。
返回值:
CURSOR类
class cursor
{
public:
BOOL IsOpened();
BOOL ExecuteSQL(char * stmt);
cursor();
~cursor();
BOOL open(connection *conn_param);
BOOL close();
BOOL parse(const char *stmt);
/* 绑定输入*/
BOOL bind_by_position(int sqlvnum, void *progvar,int progvarlen,
int datatype,short *indicator);
/* 定义输出*/
BOOL define_by_position(int position, void *buf,int bufl, int datatype);
//取得列描述信息
BOOL describe(int position, long *dbsize, int *dbtype,
void *cbuf, int *cbufl, long *dsize, int *prec,
int *scale, int *nullok);
BOOL execute();
BOOL fetch();
void display_error();
private:
int get_error_code();
Cda_Def cda;
connection *conn;
enum cursor_state
{
not_opened,
opened
};
cursor_state state;
};
BOOL IsOpened();
函数用途:判断游标是否打开
参数说明:
返回值:游标打开返回值为TRUE,游标没有打开返回值为FALSE BOOL ExecuteSQL(char * stmt);
函数用途:直接执行不带绑定输入和定义输出的SQL语句,如插入、更新、提交、回滚等。
实际上完成解析(PARSE)和执行(EXECUTE)的功能。
参数说明:char * stmt构造的SQL语句
返回值:成功执行返回值为TRUE,执行不成功返回值为FALSE BOOL open(connection *conn_param);
函数用途:打开游标
参数说明:connection *conn_param connection对象的地址
返回值:打开成功返回值为TRUE,打开不成功返回值为FALSE BOOL close();
函数用途:关闭游标
参数说明:
返回值:成功关闭游标返回值为TRUE,关闭游标不成功返回值为FALSE
BOOL parse(const char *stmt);
函数用途:解析所构造的SQL语句
参数说明:const char *stmt 所构造的SQL语句
返回值:解析成功返回值为TRUE,解析不成功返回值为FALSE
BOOL bind_by_position(int sqlvnum, void *progvar,int progvarlen, int datatype,short *indicator);
函数用途:该函数用于绑定输入,即宿主变量作为SQL语句的参数,建议直接将宿主变量的值格式化进SQL语句(SQL PLUS 可以直接执行的字符串),以避免使用此函数。
参数说明:
返回值:
BOOL define_by_position(int position, void *buf,int bufl, int datatype);
函数用途:该函数用于定义输出即定义SQL语句返回的记录所保存到的宿主变量的内存地址。
参数说明:int position,--以1为开始的待定义的SQL语句记录项的索引值。
void *buf,--宿主变量的内存地址
int bufl,--宿主变量的长度
int datatype—宿主变量的数据类型(参照OCIDEM。
H中的数据类型预定义)
返回值:成功返回值为TRUE,不成功返回值为FALSE
BOOL describe(int position, long *dbsize, int *dbtype,
void *cbuf, int *cbufl, long *dsize, int *prec,
int *scale, int *nullok);
函数用途:该函数用于返回表结构信息
参数说明:
返回值:
BOOL execute();
函数用途:execute执行经过解析(、定义输出)的SQL语句。
参数说明:
返回值:执行成功返回值为TRUE,执行不成功返回值为FALSE
BOOL fetch();
函数用途:fetch 函数取一条SELECT语句返回的记录。
再次执行此函数时,取出下一条记录。
参数说明:
返回值:执行成功返回值为TRUE,当取记录失败或没有记录可取时,返回FALSE。
void display_error();
函数用途:display_error当各个函数返回值为FALSE时,调用此函数可以显示错误信息。
*FETCH函数除外。
参数说明:
返回值:。