在oracle的proc编程过程中,游标是一个大量使用的特性。但是proc的程序作为oracle的客户端程序,是需要通过通讯与oracle服务端进行交互的。所以在大量数据fetch的过程中,抛开查询本身的问题外,网络交互将成为影响性能的一个重要的指标。
实际上,proc有一个预编译选项,叫做PREFETCH。在oracle的手册中提到:
PREFETCH
Purpose
Use this option to speed up queries by pre-fetching a number of rows.
Syntax
PREFETCH=integer
Default
1
Usage Notes
Can be used in a configuration file or on the command-line. The value of the integer is
used for execution of all queries using explicit cursors, subject to the rules of
precedence.
When used in-line it must placed before OPEN statements with explicit cursors. Then
the number of rows pre-fetched when that OPEN is done is determined by the last
in-line PREFETCH option in effect.
The value range allowed is 0.. 65535.
我们可以在linux下用strace查看程序实际的运行过程。在增加了PREFETCH=50的情况下:
write(5, "\0\25\0\0\6\0\0\0\0\0\3\5$\2\0\0\0003\0\0\0", 21) = 21
read(5, "\7\333\0\0\6\0\0\0\0\0\6\0\2\320\4\0\0\0\0\0003\0\0\0\0"..., 2064) = 1448
read(5, "\1\7xl\3\7\1\1\1\5\304\0051J\17\5\304\0051J\17\5\304\005"..., 563) = 563
read(5, "\2\n\0\0\6\0\0\0\0\0jbVkTyK\4\303\v\1\34\0033FB\25\10\000"..., 2064) = 522
第一个write调用是oracle客户端向服务端请求数据的请求,后续的3个read调用,是客户端从服务端获取数据的过程,按照上面的说法,这里应该一次获取了50条的数据。
我们再把PREFETCH这个预编译选项去掉的话,可以看见:
write(5, "\0\25\0\0\6\0\0\0\0\0\3\5\27\2\0\0\0\2\0\0\0", 21) = 21
read(5, "\1\31\0\0\6\0\0\0\0\0\6\0\2\320\4\0\0\0\0\0\2\0\0\0\0\0"..., 2064) = 281
很明显一个请求发出后,后面收到的数据就少多了,按照文档中的说法,这里只获取了1条的数据。
相比之下通讯的开销差异是很大的。
分享到:
相关推荐
Oracle Proc*C设计是一种在C语言中使用Oracle数据库的接口编程技术。Proc*C是Oracle提供的一种预编译器,它允许开发者直接在C程序中嵌入SQL语句,从而简化了数据库应用程序的开发过程。Proc*C提供了更高效、更直接的...
在Linux环境下,利用ProC开发Oracle应用,可以充分利用C语言的效率和灵活性,同时享受Oracle数据库的强大功能。 1. **Oracle ProC概述** - ProC是Oracle预编译器的简称,它将C语言源代码转换为PL/SQL块,然后这些...
### 嵌入式开发数据库PROC*C #### 概述 PROC*C是一种广泛应用于嵌入式系统的编程语言,...通过这些内容,开发者可以更好地理解如何在Oracle环境下配置和使用PROC*C,以及在实际开发过程中可能遇到的问题和解决方法。
《proc*c C++编程艺术》一书主要探讨的是在Oracle 11g环境中,如何高效地使用proc*c和C++进行数据库编程。Proc*C是一种Oracle提供的预编译器,它允许程序员使用C语言来编写PL/SQL代码,使得C程序可以直接与Oracle...
根据提供的标题、描述以及部分代码内容,我们可以详细探讨Oracle游标的使用方法,特别是明确游标(Explicit Cursor)和隐式游标(Implicit Cursor)的区别及其具体应用方式。 ### Oracle游标简介 在Oracle数据库中...
标题中的"msmmPrj.rar_VC++ ORACLE_oracle_vc oracle_vc oracle 10g proc*c"揭示了这个压缩包包含了一个使用VC++与Oracle数据库交互的项目示例,特别提到了`proc`,这可能是指Oracle的Pro*C,一个预编译器,用于将C...
《Pro*C程序设计ORACLE调用接口》是关于在C语言中使用Oracle数据库的一种高效方法。Pro*C,全称为Pre-Compiler for C,是Oracle公司提供的一个预编译器,它允许开发者直接在C程序中嵌入SQL语句,极大地提高了数据库...
Proc*C是一种特殊的C语言扩展,它允许程序员直接在C代码中嵌入SQL语句,这使得在数据库应用程序中调用存储过程、处理结果集和事务管理变得更加便捷。Proc*C的主要优势在于性能提升,因为它减少了网络通信开销,提高...
《ORACLE PROC_*C编程点滴》这篇文档主要探讨了在Oracle数据库环境下使用PROC_*C进行编程的一些关键点,特别是在预编译时指定数据库用户和处理游标操作的细节。以下是这些知识点的详细说明: 1. **预编译时指定...
2. **游标处理**:ProC支持Oracle游标,允许在C/C++代码中处理查询结果集。 3. **异常处理**:ProC提供了与PL/SQL类似的异常处理机制,可以捕获和处理数据库错误。 4. **动态SQL**:通过EXEC SQL EXECUTE IMMEDIATE...
Oracle的PROC,全称为Pro*C或ProC Precompiler,是一种集成在Oracle开发工具中的C语言扩展,用于编写高效能的数据库应用。它允许开发者在C或C++代码中嵌入SQL和PL/SQL语句,使得能够直接与Oracle数据库进行交互,...
PROC,全称为Procedural Language/SQL,是Oracle提供的一种混合编程语言,它允许开发者在SQL语句中嵌入PL/I、C、C++或Java等过程语言的代码,以实现更复杂的业务逻辑和数据库操作。 1. **PROC程序设计**: - **PL/...
标题和描述中提到的“oracle+proc+c”的学习,实际上主要聚焦于Oracle数据库中的PL/SQL(Procedural Language for SQL)编程语言的学习。PL/SQL是Oracle为增强其数据库功能而开发的一种专有编程语言,它结合了SQL的...
Oracle 11g ProC/C++编程艺术是关于在Oracle数据库环境下使用Pro*C/C++进行应用开发的专业书籍。源代码提供了书中的实例和示例,帮助读者深入理解并实践相关技术。以下是关于Oracle 11g ProC/C++编程的一些核心知识...
Oracle PROC,全称为Pro*C,是Oracle公司提供的一种预编译器,用于将C语言与PL/SQL结合,便于在C程序中嵌入对Oracle数据库的访问。PROC程序设计是Oracle数据库开发的重要组成部分,尤其在处理大量数据或者需要高性能...
样例代码通常会涵盖这些基本概念和高级特性,通过学习和分析这些样例,你可以深入理解如何在实际项目中应用ProC/C++,提高数据库应用程序的效率和可维护性。对于初学者来说,这些示例是宝贵的参考资料,可以快速上手...
Oracle 游标是 PL/SQL 中的一种重要概念,用于查询数据库,获取记录集合(结果集)的指针。游标可以分为静态游标和动态游标两种。 静态游标 静态游标可以分为显示游标和隐式游标两种。 显示游标 显示游标是使用 ...
ProC结合了C语言的强大功能和Oracle数据库的高级特性,如PL/SQL、游标、存储过程等,为大型企业级应用提供了灵活且高效的解决方案。 一、Oracle ProC概述 Oracle ProC 是Oracle预编译器的简称,它将C代码转换为PL/...
根据给定的信息,本文将详细解释Oracle中的存储过程(Procedure)、游标(Cursor)以及函数(Function)在同步员工加班时间的应用。 ### 一、Oracle 存储过程(Procedure) 存储过程是预先编译并存储在数据库...
通过学习这个教程,读者不仅可以掌握Oracle ProC的基本用法,还能了解如何在实际项目中有效地应用ProC,提高数据库应用程序的效率和质量。对于希望深入Oracle数据库开发的专业人士来说,这是一个不可或缺的学习资源...