访问www.tomcoding.com网站,学习Oracle内部数据结构,详细文档说明,下载Oracle的exp/imp,DUL,logminer,ASM工具的源代码,学习高技术含量的内容。

直接路径装载最少分配三个句柄,第一个是直接路径上下文句柄OCIDirPathCtx,这个句柄从父句柄环境句柄envhp分配,每一个要装载的对象都要有一个OCIDirPathCtx,可以分配多个句柄,也可以多个对象共用一个句柄。以OCIDirPathCtx为父句柄,可以分配另外两个句柄,一个是直接路径字段数组句柄OCIDirPathColArray,用于设置表的字段信息和字段数据。另一个是直接路径流句柄OCIDirPathStream,用于把字段数组转换成数据流。

我们之前创建过一个表,用于前面的OCI代码演示,建表语句是CREATE TABLE test_tab (ID NUMBER, NAME CHAR(30), ADDR VARCHAR2(200))。我们还以这个表为例,使用直接路径装载插入数据,看看开始分配句柄和设置句柄属性的过程。表的名称为test_tab,表的schema为scott,下面是代码演示。

OCIEnv       *envhp = NULL;
OCIError *errhp = NULL;
OCIServer *svrhp = NULL;
OCISession *usrhp = NULL;
OCISvcCtx *svchp = NULL; int dp_load(void){
ub4 buf_sz;
ub4 ncol;
OCIDirPathCtx *dpctx;
OCIDirPathColArray *dpca;
OCIDirPathStream *dpstr; /* 分配直接路径上下文句柄,父句柄是envhp */
if (check_oci_error(errhp,
OCIHandleAlloc((void *)envhp, (void **)&dpctx,
OCI_HTYPE_DIRPATH_CTX, 0, (void **)NULL)
) < 0)
return (-1); /* 分配直接路径字段数组句柄,父句柄是dpctx */
if (check_oci_error(errhp,
OCIHandleAlloc((void *)dpctx, (void **)&dpca,
OCI_HTYPE_DIRPATH_COLUMN_ARRAY, 0, (void **)NULL)
) < 0)
return (-1); /* 分配直接路径流句柄,父句柄是dpctx */
if (check_oci_error(errhp,
OCIHandleAlloc((void *)dpctx, (void **)&dpstr,
OCI_HTYPE_DIRPATH_STREAM, 0, (void **)NULL)
) < 0)
return (-1); /* 设置表的schema,在上下文句柄中设置 */
if (check_oci_error(errhp,
OCIAttrSet((void *)dpctx, (ub4)OCI_HTYPE_DIRPATH_CTX,
(void *)"scott", strlen("scott"),
(ub4)OCI_ATTR_SCHEMA_NAME, errhp)
) < 0)
return (-1); /* 设置表名称,在上下文句柄中设置 */
if (check_oci_error(errhp,
OCIAttrSet((void *)dpctx, (ub4)OCI_HTYPE_DIRPATH_CTX,
(void *)"test_tab", strlen("test_tab"),
(ub4)OCI_ATTR_NAME, errhp)
) < 0)
return (-1); /* 设置转换缓冲区的大小为2M */
buf_sz = 2 * 1024 * 1024;
if (check_oci_error(errhp,
OCIAttrSet((void *)dpctx, (ub4)OCI_HTYPE_DIRPATH_CTX,
(void *)&buf_sz, 0,
(ub4)OCI_ATTR_BUF_SIZE, errhp)
) < 0)
return (-1); /* 设置表的字段个数 */
ncol = 3;
if (check_oci_error(errhp,
OCIAttrSet((void *)dpctx, (ub4)OCI_HTYPE_DIRPATH_CTX,
(void *)&ncol, 0,
(ub4)OCI_ATTR_NUM_COLS, errhp)
) < 0)
return (-1); /* 后面需要设置表的字段信息了,我们在下一节中继续 */
/* 未完,待续 ... */ return (0);
}

在上面的例子中我们分配了三个句柄,并且在代表对象的直接路径上下文中设置了表的属主,表的名称,表的字段个数,转换缓冲区的大小等属性。

在下一节中我们看看怎样设置表的字段属性和字段其他信息,字段的设置有点复杂,我们专门用一节来讲清楚。

OCI编程高级篇(十三) 直接路径装载分配句柄的更多相关文章

  1. SVN版本库的备份、还原、移植(初级篇、中级篇和高级篇)

    版本库数据的移植:svnadmin dump.svnadmin load 导出: $svnlook youngest myrepos //查看到目前为止最新的版本号 $svnadmin dump my ...

  2. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  3. 面试题_Spring高级篇

    Spring高级篇 1.什么是 Spring 框架? Spring 框架有哪些主要模块?  Spring 框架是一个为 Java 应用程序的开发提供了综合.广泛的基础性支持的 Java 平台. Spr ...

  4. VFP的数据策略:高级篇

    VFP的数据策略:高级篇 引语 在“VFP中的数据策略:基础篇”一文中,我们研究了VFP应用程序中访问非VFP数据(如SQL Server)的不同机制:远程视图.SQL Passthrough.ADO ...

  5. redis学习笔记(详细)——高级篇

    redis学习笔记(详细)--初级篇 redis学习笔记(详细)--高级篇 redis配置文件介绍 linux环境下配置大于编程 redis 的配置文件位于 Redis 安装目录下,文件名为 redi ...

  6. C#高级知识点&(ABP框架理论学习高级篇)——白金版

    前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...

  7. 【读书笔记】.Net并行编程高级教程(二)-- 任务并行

    前面一篇提到例子都是数据并行,但这并不是并行化的唯一形式,在.Net4之前,必须要创建多个线程或者线程池来利用多核技术.现在只需要使用新的Task实例就可以通过更简单的代码解决命令式任务并行问题. 1 ...

  8. PHP笔记(PHP高级篇)

    高级篇中将涉及数据库的使用以及Cookie和Session会话,提高PHP的开发效率和运行效率 PHP程序员需要掌握的MySQL操作 为项目设计表 使用SQL语句 MySQL的目录结构 data目录中 ...

  9. PC游戏编程(入门篇)(前言写的很不错)

    PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 ...

  10. Shell编程进阶篇(完结)

    1.1 for循环语句 在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行. 它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器,或 ...

随机推荐

  1. Spring注解之@Autowired:Setter 方法上使用@Autowired注解

    可以在 JavaBean中的 setter 方法中使用 @Autowired 注解.当 Spring遇到一个在 setter 方法中使用的 @Autowired 注解时,它会在方法中按照类型自动装配参 ...

  2. CentOS 7.* 安装最新版nginx1.28*

    一.下载nginx https://nginx.org/en/download.html 选择稳定版本 nginx-1.28.0 如果使用虚拟机,可以先用windows系统下载后,上传到虚机,此步骤省 ...

  3. 关于家庭宽带IPv6的开启、绑定域名、使用教程等

    前言 好几年前网上就很多讨论家庭宽带支持IPv6,能怎么怎么改变生活.带来多少便利,奈何之前租的房子是房东办好的宽带,我没有权限接触到光猫,自己也一直懒得研究这个新鲜事物,前阵子自己捣鼓了一下,还是得 ...

  4. DRF之请求执行流程和APIView源码分析

    DRF之请求执行流程和APIView源码分析 [一]路由入口 from django.contrib import admin from django.urls import path from bo ...

  5. ORA-01555系列:一、ORA-01555错误的本质与原理

    我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效 ...

  6. 可以安装成功的red5资源

    找了好久,只有这个可用 https://download.csdn.net/download/haiwalt/8600781 注意下 RED5_HOME 路径是运行exe文件后   有个  D:\Re ...

  7. 如何基于three.js(webgl)引擎架构,实现3D微信小游戏(第一课)

    引言 在三维图形和游戏开发领域,three.js 作为一个基于 WebGL 的 JavaScript 库,提供了强大的功能来创建和显示动画化的 3D 计算机图形.它使得开发者能够轻松地在网页上构建复杂 ...

  8. Layui 更新Table 表格内容的值

    $.ajax({ //请求方式 type: "POST", //请求地址 url: "/", //数据,json字符串 data: { }, //请求成功 su ...

  9. Codeforces Round #710 (Div. 3) ABCDE 题解

    A. Strange Table 签到题,算出对应行列即可. view code #include<iostream> #include<string> #include< ...

  10. ToStringBuilder如何忽略null和空字符串

    日常开发中,经常用org.apache.commons.lang3.builder.ToStringBuilder工具类来记录日志,比如: package com.cnblogs.yjmyzz; im ...