关闭

OCI学习笔记三

标签: 服务器nulloraclesqlsessionobject
2731人阅读 评论(0) 收藏 举报
分类:
 
OCI一些定义说明
1.创建OCI环境即创建和初始化OCI工作环境,其他的OCI函数需要OCI环境才能执行.
2.需要申请的句柄类型:
  2.1)OCI环境句柄:OCI_HTYPE_ENV ,它定义了所有OCI函数的环境调用环境,是其他句柄的父句柄.(由OCIEnvlnit或OCIEnvCreate生成).
  2.2)错误句柄:OCI_HTYPE_ERROR,它作为一些OCI函数的参数,用来记录这些OCI函数的操作过程中所产生的错误,当有错误发生时,可用
OCIErrorGet()来读取错误句柄中记录的错误信息.
  2.3)服务器环境句柄:OCI_HTPYE_SVCCTX,定义OCI调用的服务器操作环境,它包含服务器,用户会话和事物三种句柄.
  2.4)服务器句柄:OCI_HTYPE_SERVER,标识数据源,它转换为与服务器的物理连接.
  2.5)用户会话句柄:OCI_HTYPE_SESSION,定义用户角色和权限及OCI调用的执行环境.
  2.6)事物句柄:OCI_HTYPE_TRANS,定义执行SQL操作的事物环境,事物环境中包含用户的会话状态信息.
  2.7)语句句柄:OCI_HTYPE_STMT,是一个标识SQL语句或者PLSQL块,以及其相关属性的环境.
  2.8)Bind/Define句柄:属于语句句柄的子句柄,由OCI库隐式自动生成,用户不需要自己再申请,OCI输入变量存储在bind句柄中,输出变
量存储在Define句柄中.
3.句柄属性包括:
服务器环境句柄属性:(OCI_HTYPE_SVCCTX)
OCI_AATR_SERVER--设置/读取服务环境的服务环境属性
OCI_ATTR_SESSION--设置/读取服务环境的会话认证环境属性
OCI_ATTR_TRANS--设置/读取服务环境的事物环境属性
用户会话句柄属性:(OCI_HTYPE_SESSION)
OCI_ATTR_USERNAME--设置会话认证所使用的用户名
OCI_ATTR_PASSWORD--设置会话认证所使用的用户口令
服务器句柄:(OCI_HTYPE_SERVER)
OCI_ATTR_NOBLOCKING_MODE--设置/读取服务器连接: =TRUE时服务器连接设置为非阻塞模式.
语句句柄:(OCI_HTYPE_STMT)
OCI_ATTR_ROW_COUNT--只读,为当前已处理的喊声,其default=1
OCI_ATTR_STMT_TYPE--读取当前SQL语句的类
型:OCI_STMT_BEGIN,OCI_STMT_SELECT,OCI_STMT_INSERT,OCI_STMT_UPDATE,OCI_STMT_DELETE,OCI_STMT_PARAM_COUNT(返回语句选择列中
的列数)

4.关于输出变量定义:
如果在语句执行前就知道select语句的选择列表结构,则定义输出操作可在调用OCISTMTExecute前进行,如果查询语句的参数为用户动态
输入的,则必须在执行后定义.
5.OCI函数返回值:
OCI_SUCCESS--函数执行成功0
OCI_SUCCESS_WITH_INFO--执行成功,但有诊断消息返回,可能是警告信息
OCI_NO_DATA--函数执行完成,单没有其他数据
OCI_ERROR--函数执行错误
OCI_INVALID_HANDLE--传递给函数的参数为无效句柄,或传回的句柄无效
OCI_NEED_DATA--需要应用程序提供运行时刻的数据
OCI_CONTINUE--回调函数返回代码,说明回调函数需要OCI库恢复其正常的处理操作
OCI_STILL_EXECUTING--服务环境建立在非阻塞模式,OCI函数调用正在执行中.

6.OCI的连接方式
  OCI连接有两种方式:Blocking(阻塞方式)和non_Blocking(非阻塞方式)
阻塞方式就是当调用OCI操作时,必须等到此OCI操作完成后服务器才返回客户端相应的信息,不管是成功还是失败.非阻塞方式是当客户端
提交OCI操作给服务器后,服务器立即返回OCI_STILL_EXECUTING信息,而不等待服务器端的操作完成.
  对于non_Blocking方式,应用程序若收到一个OCI函数的返回值为OCI_STILL_EXECUTING时必须再次对每一个OCI函数的返回值进行判断,
判断其成功与否.
  可通过设置服务器属性为OCI_ATTR_NONBLOCKING_MODE来实现,系统默认方式为非阻塞模式.

7.OCI函数设置的模式有:
OCI_DEFAULT:使用OCI默认的环境
OCI_THREADED:线程环境下使用OCI
OCI_OBJECT:对象模式
OCI_SHARED:共享模式
OCI_ENENTS
OCI_NO_UCB
OCI_ENV_NO_MUTEX:非互斥访问模式
其中模式可以用逻辑运算符进行叠加,将函数设置成多种模式,如
mode=OCI_SHREADED|OCI_OBJECT

8.当应用程序与服务器断开连接时,程序没有使用OCITransCommit()进行事物的提交,则所有活动的事物会自动回滚.
9.OCI重定义的数据类型
typedef unsigned char  ub1;
typedef signed   char  sb1;
typedef unsigned short ub2;
typedef signed   short sb2;
typedef unsigned int   ub4;
typedef signed   int   sb4;
typedef ub4            duword;
typedef sb4            dswork;
typedef dsword         dword;

10.在SQL语句准备后,可以用OCIAttrSet(0 设置该语句的类型属性OCI_ATTR_STMT_TYPE,以后可读取语句属性,根据属性分别进行处理)
11.批量绑定输入和定义输出参数,将数据存入一个静态数组中.一次执行可以提交或读取多行记录值.
12.结合占位符合指示器变量
   占位符:在程序中,一些SQL语句需要在程序运行时才能确定它的语句数据,在设计时可用一个占位符来代替,当程序运行时,在它准备好
语句后,必须为每个占位符指定一个变量,即将占位符与程序变量地址结合,执行时,Oracle就从这些变量中读取数据,并将它们与SQL语句
一起传递给Oracle服务器执行.OCI结合占位符时,它将占位符与程序变量关联起来,并同时要指出程序变量的数据类型和数据长度.
如:select * from test where name=:p1 and age>:p2,:p1和:p2为占位符
   指示器变量:由于在Oracle中,列值可以为NULL,但是在C语言中没有NULL值,为了能使OCI程序表达NULL列值,OCI函数允许程序为说执行
语句中的结合变量同时关联一个指示器变量或指示符变量数组,以说明所结合的占位符是否为NULL或所读取的列值是否为NULL,以及多读
取的列值是否被截取.
除SQLT_NTY(SQL Named DataType)外,指示符变量或者指示符变量数组的数据类型为sb2.其值说明:
-1:OCI程序将NULL赋给Oracle表的列,忽略占位符结合的程序变量值
0:应用程序将程序变量值赋给指定列
作为输出变量时:(如select语句中)
-2:所读取的列长度大于程序变量的长度,如被截取.
-1:所读取的列值为NULL,输入变量的值不会被改变.
0:数据被完整读入到指定的程序变量中


OCI一些定义说明
1.创建OCI环境即创建和初始化OCI工作环境,其他的OCI函数需要OCI环境才能执行.

2.需要申请的句柄类型:
  2.1)OCI环境句柄:OCI_HTYPE_ENV ,它定义了所有OCI函数的环境调用环境,是其他句柄的父句柄.(由OCIEnvlnit或OCIEnvCreate生成).
  2.2)错误句柄:OCI_HTYPE_ERROR,它作为一些OCI函数的参数,用来记录这些OCI函数的操作过程中所产生的错误,当有错误发生时,可用

COIErrorGet()来读取错误句柄中记录的错误信息.
  2.3)服务器环境句柄:OCI_HTPYE_SVCCTX,定义OCI调用的服务器操作环境,它包含服务器,用户会话和事物三种句柄.
  2.4)服务器句柄:OCI_HTYPE_SERVER,标识数据源,它转换为与服务器的物理连接.
  2.5)用户会话句柄:OCI_HTYPE_SESSION,定义用户角色和权限及OCI调用的执行环境.
  2.6)事物句柄:OCI_HTYPE_TRANS,定义执行SQL操作的事物环境,事物环境中包含用户的会话状态信息.
  2.7)语句句柄:OCI_HTYPE_STMT,是一个标识SQL语句或者PLSQL块,以及其相关属性的环境.
  2.8)Bind/Define句柄:属于语句句柄的子句柄,由OCI库隐式自动生成,用户不需要自己再申请,OCI输入变量存储在bind句柄中,输出变

量存储在Define句柄中.

3.句柄属性包括:
服务器环境句柄属性:(OCI_HTYPE_SVCCTX)
OCI_AATR_SERVER--设置/读取服务环境的服务环境属性
OCI_ATTR_SESSION--设置/读取服务环境的会话认证环境属性
OCI_ATTR_TRANS--设置/读取服务环境的事物环境属性
用户会话句柄属性:(OCI_HTYPE_SESSION)
OCI_ATTR_USERNAME--设置会话认证所使用的用户名
OCI_ATTR_PASSWORD--设置会话认证所使用的用户口令
服务器句柄:(OCI_HTYPE_SERVER)
OCI_ATTR_NOBLOCKING_MODE--设置/读取服务器连接: =TRUE时服务器连接设置为非阻塞模式.
语句句柄:(OCI_HTYPE_STMT)
OCI_ATTR_ROW_COUNT--只读,为当前已处理的喊声,其default=1
OCI_ATTR_STMT_TYPE--读取当前SQL语句的类

型:OCI_STMT_BEGIN,OCI_STMT_SELECT,OCI_STMT_INSERT,OCI_STMT_UPDATE,OCI_STMT_DELETE,OCI_STMT_PARAM_COUNT(返回语句选择列中

的列数)


4.关于输出变量定义:
如果在语句执行前就知道select语句的选择列表结构,则定义输出操作可在调用OCISTMTExecute前进行,如果查询语句的参数为用户动态

输入的,则必须在执行后定义.

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


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

提交OCI操作给服务器后,服务器立即返回OCI_STILL_EXECUTING信息,而不等待服务器端的操作完成.
  对于non_Blocking方式,应用程序若收到一个OCI函数的返回值为OCI_STILL_EXECUTING时必须再次对每一个OCI函数的返回值进行判断,

判断其成功与否.
  可通过设置服务器属性为OCI_ATTR_NONBLOCKING_MODE来实现,系统默认方式为非阻塞模式.


7.OCI函数设置的模式有:
OCI_DEFAULT:使用OCI默认的环境
OCI_THREADED:线程环境下使用OCI
OCI_OBJECT:对象模式
OCI_SHARED:共享模式
OCI_ENENTS
OCI_NO_UCB
OCI_ENV_NO_MUTEX:非互斥访问模式
其中模式可以用逻辑运算符进行叠加,将函数设置成多种模式,如
mode=OCI_SHREADED|OCI_OBJECT


8.当应用程序与服务器断开连接时,程序没有使用OCITransCommit()进行事物的提交,则所有活动的事物会自动回滚.

9.OCI重定义的数据类型
typedef unsigned char  ub1;
typedef signed   char  sb1;
typedef unsigned short ub2;
typedef signed   short sb2;
typedef unsigned int   ub4;
typedef signed   int   sb4;
typedef ub4            duword;
typedef sb4            dswork;
typedef dsword         dword;


10.在SQL语句准备后,可以用OCIAttrSet(0 设置该语句的类型属性OCI_ATTR_STMT_TYPE,以后可读取语句属性,根据属性分别进行处理)

11.批量绑定输入和定义输出参数,将数据存入一个静态数组中.一次执行可以提交或读取多行记录值.

12.结合占位符合指示器变量
   占位符:在程序中,一些SQL语句需要在程序运行时才能确定它的语句数据,在设计时可用一个占位符来代替,当程序运行时,在它准备好

语句后,必须为每个占位符指定一个变量,即将占位符与程序变量地址结合,执行时,Oracle就从这些变量中读取数据,并将它们与SQL语句

一起传递给Oracle服务器执行.OCI结合占位符时,它将占位符与程序变量关联起来,并同时要指出程序变量的数据类型和数据长度.
如:select * from test where name=:p1 and age>:p2,:p1和:p2为占位符
   指示器变量:由于在Oracle中,列值可以为NULL,但是在C语言中没有NULL值,为了能使OCI程序表达NULL列值,OCI函数允许程序为说执行

语句中的结合变量同时关联一个指示器变量或指示符变量数组,以说明所结合的占位符是否为NULL或所读取的列值是否为NULL,以及多读

取的列值是否被截取.
除SQLT_NTY(SQL Named DataType)外,指示符变量或者指示符变量数组的数据类型为sb2.其值说明:
=-1:OCI程序将NULL赋给Oracle表的列,忽略占位符结合的程序变量值
>=0:应用程序将程序变量值赋给指定列
作为输出变量时:(如select语句中)
=-2:所读取的列长度大于程序变量的长度,如被截取.
=-1:所读取的列值为NULL,输入变量的值不会被改变.
=0:数据被完整读入到指定的程序变量中

>0所读取的列数据长度大于程序变量的长度,则被截取,指示符变量值为所读取数据被截取前的实际长度

 

 

 

http://wenku.baidu.com/view/9e71a70203d8ce2f006623fd.html?from=related&hasrec=1
 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:111531次
    • 积分:1569
    • 等级:
    • 排名:千里之外
    • 原创:50篇
    • 转载:6篇
    • 译文:0篇
    • 评论:23条
    最新评论