OCI操作oracle数据库

合集下载

oci后缀

oci后缀

oci后缀OCI后缀是指Object Connector Interface的简称,是Oracle公司推出的一种数据库连接技术。

通过OCI,开发人员可以使用各种编程语言与Oracle数据库进行交互,实现数据的读取、写入和修改等操作。

本文将介绍OCI后缀的概念、优势以及使用方法。

一、概念介绍OCI后缀即Object Connector Interface,它是Oracle数据库提供的一种应用编程接口,用于实现程序与数据库的连接和交互。

通过OCI后缀,开发者可以使用C、C++等编程语言来编写与Oracle数据库的应用程序,实现数据的访问和操作。

二、优势分析1. 高性能:OCI后缀采用了Oracle数据库底层的C语言接口,能够直接与数据库进行交互,因此具有较高的性能优势。

相比其他的数据库连接方式,OCI可以更高效地对数据库进行读写操作,提供更好的响应速度和并发性能。

2. 数据安全:OCI后缀支持使用Oracle数据库的安全特性,如数据加密、访问控制等,可以有效保护数据库中的数据安全。

开发者可以通过OCI来实现对敏感数据的加密处理,避免数据泄露和非法访问。

3. 多语言支持:OCI后缀提供了对多种编程语言的支持,如C、C++等。

这意味着开发者可以根据自己的编程习惯和需求,选择合适的编程语言来编写与Oracle数据库的应用程序。

同时,OCI还提供了一系列的开发工具和文档,方便开发者进行开发和调试。

三、使用方法1. 安装OCI驱动程序:在开始使用OCI后缀之前,首先需要安装相应的OCI驱动程序。

可以从Oracle官方网站下载并安装最新的OCI驱动程序,根据操作系统和编程语言选择合适的版本。

2. 配置连接参数:在编写OCI应用程序时,需要正确配置连接参数。

包括数据库的地址、端口、用户名、密码等信息。

使用OCI提供的API或者相关库函数,可以方便地进行连接参数的配置和管理。

3. 连接数据库:使用OCI提供的连接函数,可以与Oracle数据库建立起连接。

Oracle数据库连接的几种方式

Oracle数据库连接的几种方式

Oracle数据库连接的⼏种⽅式⼀、本地通过JDBC获得Oracle数据库连接通过JDBC获得Oracle数据库连接,有三种⽅式:OCI⽅式、thin⽅式和JdbcOdbc桥⽅式。

OCI⽅式依赖于本地的动态链接库,如果在本地安装了Oracle数据库客户端可以采⽤该⽅式;⽽thin⽅式为纯java的数据库连接⽅式;JdbcOdbc桥⽅式依赖于本地ODBC数据库源的配置,这种⽅式⼀般不太被采⽤。

1、OCI⽅式 先在本地安装Oracle客户端,安装完之后,在安装的路径中可以找到…/jdbc/lib/classes12.zip⽂件,我们在环境变量classpath中设置classes12.zip所在的路径。

然后通过以下的数据库连接类,在本地通过OCI⽅式获得Oracle数据库连接。

/*** 在本地获得数据库连接*/package com.j2ee.db;import java.util.*;import java.sql.*;import javax.sql.*;import java.io.*;import oracle.jdbc.driver.*;import javax.naming.*;/*** 通过OCI⽅式获得Oracle数据库连接*/public class DbConnection{ final static String sDBDriver = "oracle.jdbc.driver.OracleDriver"; final static String sConnStr = "jdbc:oracle:oci8:sr/sr@ora199"; /** * */ public DbConnection() { } /** * 获得Oracle数据库连接 */ public java.sql.Connection connectDbByOci() { java.sql.Connection conn=null; try { Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr); } catch (Exception e) { System.out.println("ERROR:"+e.getMessage()); } return conn; }}/*** 在本地获得数据库连接*/package com.j2ee.db;import java.util.*;import java.sql.*;import javax.sql.*;import java.io.*;import oracle.jdbc.driver.*;import javax.naming.*;/*** 通过thin⽅式获得Oracle数据库连接*/public class DbConnection{ private String sConnStr = ""; /** * 缺省构造器 */ public DbConnection() { sConnStr = "jdbc:oracle:thin:@10.1.4.199:1521:ora199"; } /** * @param ip,serviceName */ public DbConnection(String ip,String serviceName) { sConnStr = "jdbc:oracle:thin:@"+ip+":1521:"+serviceName; } /** * 通过thin⽅式获得Oracle数据库的连接. */ public java.sql.Connection connectDbByThin() { java.sql.Connection conn=null; try { Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr,"sr","sr"); } catch (Exception e) { System.out.println("ERROR:"+e.getMessage()); } return conn; } /** * 通过thin⽅式获得Oracle数据库的连接. * @param userId,password */ public java.sql.Connection connectByJdbc(String userId,String password) { java.sql.Connection conn=null; try {  Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr,userId,password); } catch (Exception e) { System.out.println("ERROR:"+e.getMessage()); } return conn; }} 这种⽅式运⽤起来⽐较灵活,简单,具有较强的移植性和适⽤性。

基于OCI技术的Oracle数据库连接

基于OCI技术的Oracle数据库连接

收稿日期:2003-12-03基金项目:广东省科技计划项目资助项目(2003C101037);广东省自然科学基金重点资助项目(010421)作者简介:曾志聪(1979 ),男,广东韶关人,硕士研究生,研究方向为计算机网络。

基于OCI 技术的Oracle 数据库连接曾志聪,姚国祥(暨南大学网络中心,广东广州510632)摘 要:Oracle 数据库是目前应用最广泛的数据库之一,基于Oracle 数据库的大型应用对系统响应时间提出了越来越高的要求,如何有效地提高Oracle 数据库的访问效率,减少系统等待时间成为一个热门的研究问题。

文中介绍了Oracle Call In ter face(OCI)技术及其新特性,并通过分析和对比ODBC,JDBC 的实现机理,表明了OCI 技术在访问Oracle 数据库上性能的优越性。

最后描述了OCI 技术的编程机制,用OCI 技术实现了访问Oracle 数据库的典型应用,为OCI 技术的应用提供了技术参考。

关键词:Oracle 调用接口;JDBC 驱动接口;ODBC 驱动接口;Oracle 数据库;数据库接口中图分类号:T P311.138 文献标识码:A 文章编号:1005-3751(2004)08-0011-03Oracle Database Connection Based on OCI TechnologyZENG Zhi cong ,YAO Guo x iang(N etw ork Center of Jinan University,Guang zhou 510632,China)Abstract:Oracle i s one of the most popular databases.As the demand for a shorter response ti m e in large applicati ons based on Oracle database is i ncreasing,how to shorten the response time and effectivel y acces s an Oracle database become a hot topic and gain our research interest.In this paper Oracle call i nterface (OCI )technology and its new features are introduced.T he implementing mechanism of ODBC,JDBC and OC I are compared to show the better performance of OC I on accessing an Oracle database.Finally,the mechanism of OCI programming is particularly described and some typical functions implemented with OC I for accessing Oracle databases are provided for references.Key words:OCI;JDBC;ODBC;Oracle;database API0 引 言Oracle Call Interface(OCI)是Ora cle 的数据库调用接口。

C++ 使用OCILIB 连接Oracle数据库 总结

C++ 使用OCILIB 连接Oracle数据库 总结
====== 本文测试环境 ======
本文是在 win7 64 位平台上,远程访问 64 位的 Oracle 11g 服务器,使用的编译器是 VS2012。 同时安装了对应的 64 位 Oracle 客户端,在配置和移植工具中配置对应的服务器 SCDB。配置 完毕后,使用 PLSQL Deveplor 可以正常登陆。 正常情况下,即可以使用 ocilib 连接数据库,如有问题,可能是一些配置出问题,可以参看 猫猫爱吃鱼的《OCI 试用》一文,重点摘录如下。
====== 引言 ======
在 C++下连接 Oracle 的方式可以使用 OCI。OCI 是甲骨文提供 Oracle 调用接口(Oracle Call Interface 简称 OCI),是 Oracle 数据库访问的基础接口。OCI 访问 Oracle 虽然效率很高,但 OCI 的 API 非常复杂,一个简单的功能就需要编写相当多的代码。后来 Oracle 为 C++提供了 一套新的 OCCI(Oracle C++ Call Interface)接口。该接口使用起来较为简单,但 Oracle 对其支持 力度有限,且 occi 库对编译器,编译器版本,数据库版本,crt 版本,操作平台版本都有诸 多限制。因此,出现了一些封装 oci 但是是以类 jdbc 或者 occi 风格的 wrapper 库,比如 oraLib, ocilib,ocl。本文中使用的即是 OCILIB。
system("pause");
return EXIT_SUCCESS; }
</code> ====== 错误解决 ====== 本部分记录在测试过程中碰见的错误以及解决方法。
===== 错误 LNK2019:无法解析的外部符号_OCI_Initialize@12 ===== 这是编译环境不匹配,导致 lib 文件未能正确导入的问题。由于本文中是 64 位系统,因此相 关项目需要将编译环境设置为 x64。设置方法为:项目属性 》 配置管理器 》 活动解决方 案平台 》 新建 》 x64。

ocidefinebypos rowid 的列数 -回复

ocidefinebypos rowid 的列数 -回复

ocidefinebypos rowid 的列数-回复"ocidefinebypos rowid 的列数"的主题是如何使用"ocidefinebypos rowid"来确定列数。

本文将分步回答该问题。

一、概述"ocidefinebypos rowid"是Oracle数据管理系统的一个命令。

通过使用这个命令,可以确定一个表或视图的列数。

下面将详细介绍如何使用该命令来实现这一目的。

二、了解"ocidefinebypos rowid"1. ocidefinebyposocidefinebypos是Oracle数据库中的一个命令,用于定义或绑定一个指定的位置(pos)到某个变量。

该命令在OCI程序实现中常用,用于查询结果的绑定。

2. rowidrowid是Oracle数据库中的一种特殊数据类型,用于表示数据库表中行的逻辑标识符。

每一行都具有唯一的rowid。

通过rowid,可以直接访问数据库表中的特定行。

三、使用"ocidefinebypos rowid"确定列数的步骤使用"ocidefinebypos rowid"命令确定一个表或视图的列数,需要按照以下步骤进行操作:1. 连接到Oracle数据库在使用"ocidefinebypos rowid"命令之前,需要先连接到相应的Oracle数据库。

可以使用SQL*Plus或者其他支持OCI编程的工具进行连接。

连接成功后,可以使用OCI函数来实现"ocidefinebypos rowid"命令。

2. 准备OCI程序准备OCI程序的开发环境,例如,安装相应的OCI库文件和头文件,并进行适当的配置。

可以使用C、C++或其他支持OCI编程的语言来创建OCI程序。

3. 编写OCI程序在OCI程序中,需要包含oci.h头文件,并链接相应的OCI库。

用oci开发oracle数据库的方法

用oci开发oracle数据库的方法

用oci开发oracle数据库的方法OCI是Oracle提供的一种基于C/C++语言的接口,用于访问Oracle数据库。

在OCI开发的过程中,可以使用OCI提供的函数来执行各种类型的数据库操作。

本文将介绍OCI开发Oracle数据库的一般步骤。

1. 安装Oracle数据库客户端在使用OCI开发Oracle数据库之前,您需要安装Oracle数据库客户端。

Oracle客户端包含OCI库和头文件。

建议使用与目标Oracle数据库版本相同的客户端。

2. 配置开发环境为了使用OCI进行开发,你需要在你的开发环境中配置相关的Oracle环境变量。

设置ORACLE_HOME和LD_LIBRARY_PATH环境变量,以便OCI库和头文件所在的目录被正确找到。

3. 设置OCI环境使用OCI开发Oracle数据库之前,需要创建OCI环境和错误处理器。

OCI环境是OCI函数调用所需的上下文信息,可通过OCIEnvCreate函数创建。

OCIEnvCreate函数需要连接模式和错误处理器作为输入参数。

4. 连接到Oracle数据库在使用OCI连接Oracle数据库之前,您需要知道以下信息:· Oracle数据库的SID或服务名称;· 数据库主机名或IP地址;· 使用的端口号;· 连接的用户名和密码。

您可以使用OCI函数OCILogon或OCIConnect来连接Oracle数据库。

其中OCILogon函数使用数据库SID或服务名来连接数据库,而OCIConnect函数使用主机名、端口号和服务名称。

5. 执行SQL语句使用OCI函数OCIStmtPrepare和OCIStmtExecute来执行SQL语句。

OCIStmtPrepare用于准备一个SQL语句的执行,而OCIStmtExecute函数用于实际执行该SQL语句。

执行SQL语句可能涉及到绑定参数和获取结果集,您可以使用OCI函数OCIBindByPos、OCIDefineByPos和OCIStmtFetch来完成这些操作。

oci接口标准

oci接口标准

OCI(Oracle Call Interface)是Oracle公司提供的由头文件和库函数等组成的一个访问Oracle数据库的应用程序编程接口(Application Programming Interface,API)。

它允许开发人员在第三代编程语言(包括C, C++, COBOL与FORTRAN)中通过SQL(Structure Query Language)来操纵Oracle数据库。

OCI是一种开放标准,其规范被广泛应用于各种应用程序开发,使得不同的软件和系统可以相互协作。

OCI接口标准提供了一组通用的函数和协议,用于与Oracle数据库进行交互。

这些函数和协议使得开发人员可以执行SQL查询、管理数据库连接、处理数据等操作。

OCI接口标准具有以下特点:
跨平台性:OCI接口标准可以在不同的操作系统和硬件平台上使用,使得开发人员可以轻松地在不同的环境中开发和部署应用程序。

高效性:OCI接口标准提供了高效的数据库访问机制,可以快速地执行SQL 查询和处理数据。

安全性:OCI接口标准提供了安全机制,可以保护应用程序和数据库免受攻击。

灵活性:OCI接口标准提供了丰富的函数和协议,可以满足各种不同的应用程序需求。

总之,OCI接口标准是一种广泛使用的应用程序编程接口,它为开发人员提供了与Oracle数据库交互的便捷方式,同时也为应用程序的开发和部署提供了灵活性和高效性。

orcale应用技巧

orcale应用技巧

orcale应用技巧大多数应用程序使用 OCI 的ODAC 标准方式来连接 Oracle 数据库服务器。

这是使用第三方开发语言设计 Oracle 应用程序最常用的方法。

所有的 OCI 接口都作为内部库来使用,使得编译生成的应用程序非常小。

但是,这需要在客户机上安装 Oracle 客户端软件,这使得安装和管理要花费额外的开销。

有时,安装 Oracle 客户端程序甚至是不可能的。

例如,如果你需要在远程计算机上设置你的应用程序,你不能提供特殊的文件支持。

ODAC Net 允许你的应用程序直接通过 TCP/IP 协议来连接 Oracle,而不需要 Oracle 客户端软件。

运行使用 ODAC Net 的应用程序,仅需要有一个支持 TCP/IP 协议的操作系统。

使用 ODAC Net 连接 Oracle 服务器,你需要知道 Oracle 服务器的地址,监听端口号以及数据库实例名称。

在你的应用程序中使用 Net 选项前,你只需要设置 TOraSession 对象的选项 Net 为True 且指定它的Server 属性为指定的数据库。

如果使用 ODAC 的标准方式通过 OCI 来连接数据库,你必须设置 Server 属性为 TNS 别名,但现在使用 ODAC 的 Net 选项,你只需要指定数据库字符串,格式如下: Host:Port:SID.这里, Host 指服务器地址, Port 指服务器监听端口号, SID 指特定的系统实例名称。

这里有个例子示范不使用 OCI 而连接数据库:varSession: TOraSession;. . . := True;ername := 'Scott';Session.Password := 'tiger';Session.Server := '205.227.44.44:1521:orcl';Session.Connect;注意:这些是你的应用程序要支持 Net 选项时所必须的。

Oracle程序两种接口ADO与OCI对比

Oracle程序两种接口ADO与OCI对比

目前,Oracle应用程序可以在VB、Delphi等高级开发语言中开发,也可以以C++开发,或者Java语言开发,甚至可以通过ASP、JSP、Perl等脚本语言来访问Oracle。

这些语言环境各有其优势,C++无疑是追求极致速度的首选。

在C++中我们也可以有多种接口方式,可以使用ADO通用接口,可以使用OCI/OCCI,还可以使用ODBC、OO4O及OLEDB等方式。

在这些方式中,ADO与OCI是应用最为广泛的两种方式,本文将集中力量介绍在Visual C++ 6.0 中这两种接口的开发方法及它们的特点对比。

一、ADO开发接口简介ADO(ActiveX Data Objects,ActiveX数据对象)是Microsoft为强大的数据访问接口OLEDB(对象链接和嵌入数据库)而设计的,是一个便于使用的应用层的编程接口。

使用ADO编写的应用程序可以通过OLEDB提供者访问和操作数据库服务器中的数据。

ADO 最主要的优点是易于使用、可以访问多种数据库及可以在多种语言中开发。

由于ADO 建立在自动化(Automation)的基础上,所以ADO的应用场合非常广泛,不仅可在Visual Basic 这样的高级语言开发环境中使用,还可以在一些脚本语言中使用,这对于开发Web应用和在ASP(Active Server Page,动态服务器主页)的脚本代码中访问数据库提供了操作应用的捷径。

ADO是以OLE DB为基础,它对OLE DB进行了封装,所以ADO其实是OLE DB的应用层接口,是介于OLE DB与应用程序之间的中间层。

这种结构为一致的数据访问接口提供了很好的扩展性,不再局限于特定的数据源,只要OLE DB支持的数据源,ADO都可以很好地支持。

ADO的另一个特性是使用简单,它封装了OLE DB的复杂的接口,以Connection、Recordset、Command三个主体对象及Errors、Properties、Parameters和Fields四个集合对象搭建起了ADO对象模型。

C#连接oracle数据库报错:OCIEnvCreate失败,返回代码为-1,但错误消息文本不可用

C#连接oracle数据库报错:OCIEnvCreate失败,返回代码为-1,但错误消息文本不可用

C#连接oracle数据库报错:OCIEnvCreate失败,返回代码为-1,但错误消息⽂本不可⽤原因⼤概是OracleOraDb11g_home1TNSListener服务没启动的原因步骤⼀、停⽌并重新启动OracleOraDb11g_home1TNSListener服务,试⼀下是否可⾏。

如在启动此服务出现“本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停⽌。

某些服务在未由其它服务或程序使⽤时将⾃动停⽌。

” 应该是Oracle的ORACLE_HOME出现问题,打开环境变量,找到系统变量中的ORACLE_HOME,把值改为ORACLE的安装⽬录,如下路径:E:\app\Administrator\product\11.2.0\dbhome_1再重新启动OracleOraDb11g_home1TNSListener服务,发现可以成功启动。

步骤⼆、再次启动C#软件出现了新报错:ORA-12541: TNS: ⽆监听程序解决⽅法:开始-->所有程序-->Oracle OraDb11g_home1--配置和移植⼯具--Net Configuration Assistant,重新配置.如下图。

步骤三、再次启动C#软件发现⼜出现如下报错:ora-12514:TNS:监听服务当前⽆法识别描述中的请求服务原因:没有注册监听器解决⽅法:E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN中的listener.ora修改如下所⽰:# listener.ora Network Configuration File: e:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = CLRExtProc)(ORACLE_HOME = e:\app\Administrator\product\11.2.0\dbhome_1)(PROGRAM = extproc)(ENVS = "EXTPROC_DLLS=ONLY:e:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))))ADR_BASE_LISTENER = e:\app\Administrator再次重启服务,重启C#软件发现已经可以连上ORACLE数据库!步骤四、注意:如果⽤C#写的客户端可以访问ORACLE数据库,但是⽤C#写的webservice却访问不了oracle数据库,并报错:OCIEnvCreate 失败,返回代码为 -1,但错误消息⽂本不可⽤解决⽅法:找到ORACLE的安装⽬录如:app\ ,右键此⽂件,属性,web共享,此处找到已发布的webservice,并添加共享。

OCI操作oracle数据库

OCI操作oracle数据库

OCI简介1.OCI概述OCI(Oracle Call Interfce,即Oracle调用层接口)是Oracle公司提供的由头文件和库函数等组成的一个访问Oracle数据库的应用程序编程接口(application programming interface API),它允许开发人员在第三代编程语言(包括C,C++,COBOL与FORTRAN)中通过SQL(Structure Query Language)来操纵Oracle数据库,而且OCI在一定程度上支持第三代编程语言(诸如C,C++,COBOL与FORTRAN)的数据类型、语法等等。

OCI的显著特点是全面支持Oracle的面向对象技术,同时OCI 还具有如下的一些特点:1)非常有利于应用程序的设计;2)高度控制应用程序的执行;3)允许开发人员应用已熟悉的第三代程序设计语言来应用OCI;4)支持动态SQL;5)几乎所有的Oracle的开发工具都支持OCI;6)通过回调技术(callbacks)来实现动态绑定与定义;7)通过OCI的描述函数可以获取Oracle数据库的各种参数;8)增强了数组在DML(data manipulation language)语言中的应用;OCI接口支持Windows NT和Windows 95/98/2O0o/xP操作系统,它所支持的C语言编译器包括Borland C++和MicrosoftVisualC++等。

在使用OCI开发Oralce数据库应用程序之前,应首先安装这些操作系统和C语言编译工具。

在选择安装OCI开发工具包后,Oracle安装程序将OCI文件拷贝到oracle主目录内的以下子目录中:.. BIN\:执行文件和帮助文件:..\OCIINCLUDE头文件;.. OCI\LIB\其中包含仍bc和\msvc两个子目录,分别用于存储支持Borland C++和MicroSoflVisualC++的OCI库文件,这些库文件与OCI源程序编译后所产生的目标文件进行链接生成可执行程序。

Oracle Spatial 空间数据库教程

Oracle Spatial 空间数据库教程

m_session.Open(); // 打开一个会话 m_database.Open(m_session, dbaseName, userName, password) ; // 建立数据库连接, dbaseName是数据库名称
(4)SDO_ELEM_INFO
SDO_ELEM_INFO是一个可变长度的数组,每3个数作为一 个元素单位,用于解释坐标是如何存储在SDO_ORDINATES 数组中的。本文把组成一个元素的3个数称为3元组。一个3 元组包含以下3部分的内容: l SDO_STARTING_OFFSET
SDO_STARTING_OFFATES数组中的存储位置。它的值从1开始, 逐渐增加。
元数据表说明
Oracle Spatial的元数据表存储了有空间数据的数据表名称、 空间字段名称、空间数据的坐标范围、坐标参考信息以及坐 标维数说明等信息。用户必须通过元数据表才能知道 ORACLE数据库中是否有Oracle Spatial的空间数据信息。一般 可以通过元数据视图(USER_SDO_GEOM_METADATA)访 问元数据表。元数据视图的基本定义为:
(2)SDO_SRID SDO_SRID也是一个NUMBER型的数值,它用于标识与几 何对象相关的空间坐标参考系。如果SDO_SRID为空 (null),则表示没有坐标系与该几何对象相关;如果该 值不为空,则该值必须为MDSYS.CS_SRS表中SRID字段 的一个值,在创建含有几何对象的表时,这个值必须加入 到描述空间数据表元数据的 USER_SDO_GEOM_METADATA视图的SRID字段中。 Oracle Spatial规定,一个几何字段中的所有几何对象都必 须为相同的SDO_SRID值。
VALUES ('GEOD_CITIES', 'LOCATION',

Oracle的thin驱动和oci驱动的不同

Oracle的thin驱动和oci驱动的不同
Oracle的thin驱动和oci驱动有什么不同?
这是Oracle提供的两套Java访问Oracle数据库的方法
thin就是纯粹用Java完成访问数据库的所有方法,优点是不用安装客户端
oci就是使用Java来调用本机的装和配置数据库
OCI:要安装ORACLE客户端,移植性略差,理论上性能好些
THIN:属于TYPE4,纯JAVA实现,移植性好,理论上性能略差些
推荐:最好还是使用THIN DRIVER吧,移植性好些,使用起来也相对规范些,问题也少。至于性能嘛,说实话,在8i上没感觉THIN DRIVER比OCI慢,感觉还快些。不过没有实际准确测试过,也不敢下定论。为什么呢,调用本地方法也是有开销的,JDK性能越来越好,本地方法的性能与调用的开销相抵一下就打了一点折扣。另外ORACLE 8i本身就是JAVA实现,对JAVA支持很好,用THIN DRIVER不显得慢反而快也许有这方面的原因。

Oracle_OCI(Oracle_Call_Interface)官方文档翻译

Oracle_OCI(Oracle_Call_Interface)官方文档翻译

Oracle_OCI(Oracle_Call_Interface)官⽅⽂档翻译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编程步骤的简单概括。

php oci_connect 参数

php oci_connect 参数

php oci_connect 参数摘要:1.PHP 中的OCI_CONNECT2.OCI_CONNECT 的参数3.参数的使用方法4.常见参数及其功能5.参数的注意事项正文:一、PHP 中的OCI_CONNECT在PHP 中,OCI_CONNECT 是一个用于连接Oracle 数据库的函数。

它可以帮助我们建立与Oracle 数据库的连接,从而进行数据的查询、插入、更新和删除等操作。

二、OCI_CONNECT 的参数OCI_CONNECT 函数需要两个参数,分别是用户名和密码。

这两个参数用于验证用户身份,确保只有经过授权的用户才能访问数据库。

三、参数的使用方法在使用OCI_CONNECT 函数时,需要按照以下方式输入参数:```php$username = "your_username";$password = "your_password";$conn = oci_connect($username, $password);```四、常见参数及其功能除了用户名和密码这两个必填参数外,OCI_CONNECT 函数还提供了一些可选参数,以满足不同的需求。

以下是一些常见的参数及其功能:1.`hostname`:数据库服务器的主机名或IP 地址。

如果未设置此参数,则默认为本地主机。

2.`port`:数据库服务器的端口号。

Oracle 数据库的默认端口为1521。

3.`service_name`:数据库服务名,用于区分同一主机上的多个数据库实例。

4.`database`:要连接的数据库名称。

如果未设置此参数,则默认为当前主机上的默认数据库。

5.`mode`:连接模式,取值为"READ ONLY"或"READ WRITE"。

默认为"READ ONLY"。

6.`persistent`:是否建立持久连接。

取值为布尔值,true 表示建立持久连接,false 表示建立临时连接。

postgres fdw oracle 原理

postgres fdw oracle 原理

postgres fdw oracle 原理
PostgreSQLFDW(ForeignDataWrapper)是一种机制,允许PostgreSQL数据库通过一个插件来访问外部数据源。

其中一个常见
的外部数据源是Oracle数据库。

PostgreSQL FDW通过使用Oracle的OCI(Oracle Call Interface)来访问Oracle数据库。

OCI是Oracle提供的一组API,用于访问Oracle数据库。

FDW使用OCI来执行所有的连接、查询和更新操作,并将结果转换为PostgreSQL能够理解的格式。

FDW插件包括两个部分:一个是外部表定义,另一个是访问外部数据源的C代码。

外部表定义包括表的列和数据类型,以及访问外部数据源所需的连接信息。

C代码使用OCI来连接到外部数据源,并执行SQL查询或更新操作。

它还负责将查询结果转换为PostgreSQL可
以处理的格式,并将更新操作转换为Oracle可以理解的格式。

使用PostgreSQL FDW访问Oracle数据库可以简化数据集成过程,无需将数据导入PostgreSQL中。

它还可以提高数据查询性能,因为PostgreSQL和Oracle可以在不同的服务器上运行,从而使查询可以并行执行。

总的来说,PostgreSQL FDW是一个强大的数据集成工具,可以
让PostgreSQL数据库访问外部数据源,如Oracle数据库。

它通过使用OCI来执行所有的连接、查询和更新操作,并将结果转换为PostgreSQL能够理解的格式,从而简化了数据集成过程。

- 1 -。

常用OCI函数使用说明

常用OCI函数使用说明

常用OCI函数使用说明一.Oracle oci工具包安装:$ORACLE_HOME\BIN:执行文件和help文件$ORACLE_HOME\OCI\INCLUDE:头文件$ORACLE_HOME\OCI\LIB\BC: for Borlanf C++的OCI库$ORACLE_HOME\OCI\LIB\MSVC: for MS Visual C++的OCI库如果是unix下,对于ORACLE8i,则OCI库在$ORACLE_HOME/lib下,如果是9i,则在$ORACLE_HOME/lib32下,库文件名一般为libclntsh.so1.创建OCI环境即创建和初始化OCI工作环境,其他的OCI函数需要OCI环境才能执行。

2.需要申请的句柄类型:OCI环境句柄:OCI_HTYPE_ENV—它定义所有OCI函数的环境调用环境,是其他句柄的父句柄。

(由OCIEnvInit或OCIEnvCreate生成)错误句柄:OCI_HTYPE_ERROR—作为一些OCI函数的参数,用来记录这些OCI函数操作过程中所产生的错误,当有错误发生时,可用COIErrorGet()来读取错误句柄中记录的错误信息。

服务器环境句柄:OCI_HTYPE_SVCCTX—定义OCI调用的服务器操作环境,它包含服务器、用户会话和事务三种句柄。

服务器句柄:OCI_HTYPE_SERVER—标识数据源,它转换为与服务器的物理连接。

用户会话句柄:OCI_HTYPE_SESSION—定义用户角色和权限及OCI调用的执行环境。

事务句柄:OCI_HTYPE_TRANS—定义执行SQL操作的事务环境,事务环境中包含用户的会话状态信息。

语句句柄:OCI_HTYPE_STMT—是一个标识SQL语句或PL/SQL块,以及其相关属性的环境。

Bind/Define句柄:属于语句句柄的子句柄,由OCI库隐式自动生成。

用户不需要自己再申请,OCI输入变量存储在bind 句柄中,输出变量存储在定义句柄中3.句柄属性包括:服务器环境句柄属性:(OCI_HTYPE_SVCCTX)OCI_ATTR_SERVER—设置/读取服务环境的服务器环境属性OCI_ATTR_SESSION—设置/读取服务环境的会话认证环境属性OCI_ATTR_TRANS—设置/读取服务环境的事务环境属性用户会话句柄属性:(OCI_HTYPE_SESSION)OCI_ATTR_USERNAME—设置会话认证所使用的用户名OCI_ATTR_PASSWORD—设置会话认证所使用的用户口令服务器句柄:(OCI_HTYPE_SEVER)OCI_ATTR_NOBLOCKING_MODE—设置/读取服务器连接:=TRUE时服务器连接设置为非阻塞方式语句句柄:(OCI_HTYPE_STMT)OCI_ATTR_ROW_COUNT—只读,为当前已处理的行数,其default=1OCI_ATTR_STMT_TYPE—读取当前SQL语句的类型:Eg : OCI_STMT_BEGINOCI_STMT_SELECT OCI_STMT_INSERTOCI_STMT_UPDATE OCI_STMT_DELETEOCI_ATTR_PARAM_COUNT—返回语句选择列表中的列数4.关于输出变量定义:如果在语句执行前就知道select语句的选择列表结构,则定义输出操作可在调用OCISTMTExecute前进行,如果查询语句的参数为用户动态输入的,则必须在执行后定义。

Oracle程序两种接口ADO与OCI对比

Oracle程序两种接口ADO与OCI对比

目前,Oracle应用程序可以在VB、Delphi等高级开发语言中开发,也可以以C++开发,或者Java语言开发,甚至可以通过ASP、JSP、Perl等脚本语言来访问Oracle。

这些语言环境各有其优势,C++无疑是追求极致速度的首选。

在C++中我们也可以有多种接口方式,可以使用ADO通用接口,可以使用OCI/OCCI,还可以使用ODBC、OO4O及OLEDB等方式。

在这些方式中,ADO与OCI是应用最为广泛的两种方式,本文将集中力量介绍在Visual C++ 6.0 中这两种接口的开发方法及它们的特点对比。

一、ADO开发接口简介ADO(ActiveX Data Objects,ActiveX数据对象)是Microsoft为强大的数据访问接口OLEDB(对象链接和嵌入数据库)而设计的,是一个便于使用的应用层的编程接口。

使用ADO编写的应用程序可以通过OLEDB提供者访问和操作数据库服务器中的数据。

ADO 最主要的优点是易于使用、可以访问多种数据库及可以在多种语言中开发。

由于ADO 建立在自动化(Automation)的基础上,所以ADO的应用场合非常广泛,不仅可在Visual Basic 这样的高级语言开发环境中使用,还可以在一些脚本语言中使用,这对于开发Web应用和在ASP(Active Server Page,动态服务器主页)的脚本代码中访问数据库提供了操作应用的捷径。

ADO是以OLE DB为基础,它对OLE DB进行了封装,所以ADO其实是OLE DB的应用层接口,是介于OLE DB与应用程序之间的中间层。

这种结构为一致的数据访问接口提供了很好的扩展性,不再局限于特定的数据源,只要OLE DB支持的数据源,ADO都可以很好地支持。

ADO的另一个特性是使用简单,它封装了OLE DB的复杂的接口,以Connection、Recordset、Command三个主体对象及Errors、Properties、Parameters和Fields四个集合对象搭建起了ADO对象模型。

oci测试例子

oci测试例子

oci测试例子OCI(Oracle C++ Call Interface)是一种通过C++访问Oracle数据库的方式。

以下是一个简单的OCI测试例子,该程序连接到Oracle数据库,运行一个查询并输出结果:```cppinclude <iostream>include <>using namespace std;using namespace OCI;int main() {// 初始化Oracle环境Environment::Initialize();// 创建连接Connection conn = Connection::CreateConnection(NULL);conn->Connect("username/passwordhostname:port/service_name", true);// 创建SQL语句Statement stmt = conn->CreateStatement("SELECT sysdate FROM dual");// 执行查询并获取结果Resultset res = stmt->ExecuteQuery();res->Next();cout << "Current date and time is: " << res->GetString(1) << endl;// 清理资源res->Release();stmt->Release();conn->Release();Environment::Terminate();return 0;}```这个例子展示了如何使用OCI库连接Oracle数据库、执行查询和获取结果。

注意,为了编译和运行这个程序,需要正确设置OCI库的路径和版本,并且链接相应的库文件。

ocistmt结构定义

ocistmt结构定义

ocistmt结构定义摘要:一、引言二、OCISSTMT结构定义1.结构概述2.结构元素三、OCISSTMT在数据库查询中的应用1.查询语句的组成2.查询执行的流程四、总结正文:一、引言OCISSTMT(Oracle Call Interface Statement)是Oracle数据库中用于执行SQL语句的一种结构。

在数据库编程中,我们经常需要执行各种SQL查询语句,而OCISSTMT正是负责处理这些语句的结构。

本文将详细介绍OCISSTMT的结构定义以及在数据库查询中的应用。

二、OCISSTMT结构定义1.结构概述OCISSTMT结构定义了一个用于执行SQL语句的接口。

它包含了SQL语句的执行、结果集的获取以及错误处理等功能。

通过使用OCISSTMT结构,我们可以在Oracle数据库中方便地执行各种SQL查询。

2.结构元素OCISSTMT结构包含以下几个主要元素:(1)stmt_handle:用于标识SQL语句执行的句柄。

(2)sql_text:存储待执行的SQL语句。

(3)bind_parameter_count:表示SQL语句中绑定参数的数量。

(4)bind_parameter_list:用于存储绑定参数值的列表。

(5)result_set_metadata:用于存储结果集元数据的结构。

(6)result_set:用于存储查询结果的缓冲区。

(7)result_set_status:用于表示结果集状态的结构。

三、OCISSTMT在数据库查询中的应用1.查询语句的组成在Oracle数据库中,SQL查询语句通常由SELECT、FROM、WHERE等子句组成。

通过这些子句,我们可以指定需要查询的表、字段以及筛选条件等。

例如,以下是一个简单的查询语句示例:```SELECT id, name, age FROM users WHERE age > 18;```2.查询执行的流程要执行一个SQL查询,我们需要按照以下步骤进行:(1)创建一个OCISSTMT结构实例。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OCI简介1.OCI概述OCI(Oracle Call Interfce,即Oracle调用层接口)是Oracle公司提供的由头文件和库函数等组成的一个访问Oracle数据库的应用程序编程接口(application programming interface API),它允许开发人员在第三代编程语言(包括C,C++,COBOL与FORTRAN)中通过SQL(Structure Query Language)来操纵Oracle数据库,而且OCI在一定程度上支持第三代编程语言(诸如C,C++,COBOL与FORTRAN)的数据类型、语法等等。

OCI的显著特点是全面支持Oracle的面向对象技术,同时OCI 还具有如下的一些特点:1)非常有利于应用程序的设计;2)高度控制应用程序的执行;3)允许开发人员应用已熟悉的第三代程序设计语言来应用OCI;4)支持动态SQL;5)几乎所有的Oracle的开发工具都支持OCI;6)通过回调技术(callbacks)来实现动态绑定与定义;7)通过OCI的描述函数可以获取Oracle数据库的各种参数;8)增强了数组在DML(data manipulation language)语言中的应用;OCI接口支持Windows NT和Windows 95/98/2O0o/xP操作系统,它所支持的C语言编译器包括Borland C++和MicrosoftVisualC++等。

在使用OCI开发Oralce数据库应用程序之前,应首先安装这些操作系统和C语言编译工具。

在选择安装OCI开发工具包后,Oracle安装程序将OCI文件拷贝到oracle主目录内的以下子目录中:.. BIN\:执行文件和帮助文件:..\OCIINCLUDE头文件;.. OCI\LIB\其中包含仍bc和\msvc两个子目录,分别用于存储支持Borland C++和MicroSoflVisualC++的OCI库文件,这些库文件与OCI源程序编译后所产生的目标文件进行链接生成可执行程序。

一个应用OCI程序的生成可执行应用程序的过程如图1:图由此,我们可以看出:一个应用OCI的应用程序与其它不连接数据库的应用程序生成可执行程序的过程没有区别,在程序的链接阶段OCI库与源程序的目标代码文件链接而生成可执行程序。

2.OCI程序的基本结构在一个应用程序中,我们是通过调用OCI提供的库函数来实现对Oracle数据库的操纵。

OCI提供了上百个函数,都是以OCI开头的函数,比如创建OCI环境的OCI函数:OCIEnvCreate()。

OCI函数的一个特点或者说是难点就是它的参数特别多,函数往往都有十几个参数。

一般情况下,一个OCI应用程序都是在多用户环境下的。

在一个n层网络结构的配置中,客户端的应用程序需要完成一些数据操纵,包括交换数据与处理数据。

一个OCI应用程序的基本结构包括:1)初始化OCI环境和线程;2)分配必要的句柄与数据结构;3)建立与数据库的连接以及创建用户会话;4)通过SQL与Oracle服务器交换数据,而后再做数据处理:5)结束用户会话与断开与数据库的连接;6)释放在程序中所分配的句柄。

示意如图2。

3.在OCI应用程序中执行SQL的步骤结构化查询语言(SQL Structure Query Language)是操纵关系数据库的主流语言,目前,几乎所有的商业数据库软件都支持SQL语言。

标准的SQL语言按照它的功能不同,可以分为查询、操纵、定义以及控制四种类型。

每一种都有若干关键字,具体如表1所示。

一个SQL语句在OCI应用程序中的执行步骤一般如下:1)准备SQL语句。

调用函数OCIStmtPrepare();2)在SQL语句中绑定需要输入到SQL语句中的变量。

对于DML语句来说,由于它带有输入变量,我们可以通过调用一个或者多个函数OCIBindByPos()、OCIBindByName()等把输入变量的地址绑定在DML语句中的占位符中;3)执行SQL语句。

调用OCIStmtExecute()函数。

对于DDL语句到这一步就完成了一个语句的执行;4)描述SQL中的输出的数据。

如果有必要的话,我们可以调用函数OCIParamGet()与OCIAttrGet()来获取我们所读取的记录的字段个数、字段的数据类型以及字段数据定义的最大长度。

5)定义输出变量。

对于DQL(Data Query Language)语句,即SELECT的查询语句,需要定义一定数量的变量用来接受所选择列的数据。

我们可以调用OCIDeflneByPos()、OCIDefineObject()函数等来完成这个任务。

也就建立SQL 语句所返回的数据与应用程序中变量的关系。

6)获取数据。

我们可以调用函数OCIStmtFetch()来把用SELECT选中的记录的数据赋予应用程序中的变量。

过程以及过程中调用到的函数如图3所示:虽然Oracle对标准的SQL语言有所扩展,但它也是建立在标准的SQL语言的基础之上。

上图是一个一般SQL执行的流程图,对于不同的SQL语句,所需要的步骤也有所不同。

对于DCL与DDL语句,由于没有数据的输入与输出,仅仅涉及到一些权限与定义或者删除数据库中的对象的问题,因此只需要上图的第一步与第三步便可以了。

而对于DQL与DML语句,由于有数据的输入与输出,因此需要的步骤就多一些。

其实,DML也可以只用两步来完成。

这是因为DML语句中仅仅涉及数据的输入(即,数据从应用程序到数据库端),因此我们可以把所要输入的数据以字符串的形式放在SQL语句中。

而DQL不仅可能有数据输入,而且也有数据输出(从数据库端到应用程序),因此,一个DQL语句需要如上图的六个步骤。

OCI环境配置Oracle oci工具包安装:$ORACLE_HOME\BIN:执行文件和help文件$ORACLE_HOME\OCI\INCLUDE:头文件$ORACLE_HOME\OCI\LIB\BC: for Borlanf C++的OCI库$ORACLE_HOME\OCI\LIB\MSVC: for MS Visual C++的OCI库如果是unix下,对于ORACLE8i,则OCI库在$ORACLE_HOME/lib下,如果是9i,则在$ORACLE_HOME/lib32下,库文件名一般为libclntsh.so以上所有过程,只需安装一个oracle客户端,oci的所有头文件和库文件全部包含在内,VC开发时只需包含指定的头文件,引用相关库即可。

OCI实现操作oracle数据库1.创建OCI环境即创建和初始化OCI工作环境,其他的OCI函数需要OCI环境才能执行。

2.需要申请的句柄类型OCI环境句柄: OCI_HTYPE_ENV—它定义所有OCI函数的环境调用环境,是其他句柄的父句柄。

(由OCIEnvInit或OCIEnvCreate生成)错误句柄:OCI_HTYPE_ERROR—作为一些OCI函数的参数,用来记录这些OCI函数操作过程中所产生的错误,当有错误发生时,可用COIErrorGet()来读取错误句柄中记录的错误信息。

服务器环境句柄:OCI_HTYPE_SVCCTX—定义OCI调用的服务器操作环境,它包含服务器、用户会话和事务三种句柄。

服务器句柄:OCI_HTYPE_SERVER—标识数据源,它转换为与服务器的物理连接。

用户会话句柄:OCI_HTYPE_SESSION—定义用户角色和权限及OCI调用的执行环境。

事务句柄:OCI_HTYPE_TRANS—定义执行SQL操作的事务环境,事务环境中包含用户的会话状态信息。

语句句柄:OCI_HTYPE_STMT—是一个标识SQL语句或PL/SQL块,以及其相关属性的环境。

Bind/Define句柄:属于语句句柄的子句柄,由OCI库隐式自动生成。

用户不需要自己再申请,OCI输入变量存储在bind 句柄中,输出变量存储在定义句柄中3.句柄属性包括服务器环境句柄属性:(OCI_HTYPE_SVCCTX)OCI_ATTR_SERVER—设置/读取服务环境的服务器环境属性OCI_ATTR_SESSION—设置/读取服务环境的会话认证环境属性OCI_ATTR_TRANS—设置/读取服务环境的事务环境属性用户会话句柄属性:(OCI_HTYPE_SESSION)OCI_ATTR_USERNAME—设置会话认证所使用的用户名OCI_ATTR_PASSWORD—设置会话认证所使用的用户口令服务器句柄:(OCI_HTYPE_SEVER)OCI_ATTR_NOBLOCKING_MODE—设置/读取服务器连接:=TRUE时服务器连接设置为非阻塞方式语句句柄:(OCI_HTYPE_STMT)OCI_ATTR_ROW_COUNT—只读,为当前已处理的行数,其default=1OCI_ATTR_STMT_TYPE—读取当前SQL语句的类型:Eg :OCI_STMT_BEGINOCI_STMT_SELECTOCI_STMT_INSERTOCI_STMT_UPDATEOCI_STMT_DELETEOCI_ATTR_PARAM_COUNT—返回语句选择列表中的列数4.关于输出变量定义如果在语句执行前就知道select语句的选择列表结构,则定义输出操作可在调用 OCISTMTExecute前进行,如果查询语句的参数为用户动态输入的,则必须在执行后定义。

5.OCI函数返回值OCI_SUCCESS –函数执行成功 (=0)OCI_SUCCESS_WITH_INFO –执行成功,但有诊断消息返回,可能是警告信息OCI_NO_DATA—函数执行完成,但没有其他数据OCI_ERROR—函数执行错误OCI_INV ALID_HANDLE—传递给函数的参数为无效句柄,或传回的句柄无效OCI_NEED_DATA—需要应用程序提供运行时刻的数据OCI_CONTINUE—回调函数返回代码,说明回调函数需要OCI库恢复其正常的处理操作OCI_STILL_EXECUTING—服务环境建立在非阻塞模式,OCI函数调用正在执行中。

6.OCI连接有二种方式Blocking(阻塞方式)和non_Blocking(非阻塞方式),阻塞方式就是当调用 OCI 操作时,必须等到此OCI操作完成后服务器才返回客户端相应的信息,不管是成功还是失败。

非阻塞方式是当客户端提交OCI操作给服务器后,服务器立即返回OCI_STILL_EXECUTING信息,而并不等待服务端的操作完成。

对于non-blocking方式,应用程序若收到一个OCI函数的返回值为 OCI_STILL_EXECUTING时必须再次对每一个OCI函数的返回值进行判断,判断其成功与否。

可通过设置服务器属性为OCI_ATTR_NONBLOCKING_MODE来实现。

相关文档
最新文档