基于oracle oci的数据访问c语言接口oradbi,基于Oracle OCI的数据访问C语言接口ORADBI ....

/*

======================================================================

oradbi.h - Created by cheungmine, All rights reserved.

First : Mar. 8, 2008

======================================================================*/

#ifndef ORADBI_H_INCLUDED

#defineORADBI_H_INCLUDED

#ifdef __cplusplus

extern"C"

{#endif

#ifdef ORADBI_DLLEXPORT

#  define ORADB_CALL __declspec(dllexport)

#  define ORADB_CALL1(x)  __declspec(dllexport) x

#endif

#ifndef ORADB_CALL

#  define ORADB_CALL

#endif

#ifndef ORADB_CALL1

#  define ORADB_CALL1(x)      x  ORADB_CALL

#endif

/*NOT SUPPORT UNICODE*/

#ifdef UNICODE

#pragmamessage( __FILE__" Warning UNICODE: Cannot use UNICODE" )

#endif

/*NOT SUPPORT UNICODE*/

#ifdef _UNICODE

#pragmamessage( __FILE__" Warning UNICODE: Cannot use UNICODE" )

#endif

#include

"unistd.h"

#include

"oratype.h"

#include

"oraerr.h"

/*

======================================================================

connection Functions - oraconn.c

======================================================================*/

/*connects the application to the oracle server.*/

lresult ORADB_CALL    ORA_connection_create  (

OUT ora_connection

*

connection,

INconstchar*

service_name,

INconstchar*

username,

INconstchar*

password,

INulongenv_mode,/*=OCI_THREADED|OCI_OBJECT*/

IN  BOOL            non_blocking_mode,

/*=FALSE*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*disconnects the application from the oracle server.*/

void

ORADB_CALL    ORA_connection_free (

IN  ora_connection    connection

);/*executes a sql statement with no result*/

lresult ORADB_CALL    ORA_connection_execute (

IN  ora_connection    connection,

IN

constchar*

sql_block,

INintsql_len,/*-1 for strlen called*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*prepares (and returns) a sql statement for execution*/

lresult ORADB_CALL    ORA_connection_prepare (

IN  ora_connection    connection,

IN

constchar*

sql_block,

INintsql_len,/*-1 for strlen called*/

OUT ora_sqlstmt

*sqlstmt,/*a sql statement for execution returned*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*executes a select sql statement and return the result set*/

lresult ORADB_CALL    ORA_connection_select (

IN  ora_connection    connection,

IN

constchar*

sql_select,

INintsql_len,/*-1 for strlen called*/

OUT ora_rowset

*rowset,/*the result set returned*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*commits changes*/

lresult ORADB_CALL    ORA_connection_commit (

IN  ora_connection    connection,

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*rollbacks changes*/

lresult ORADB_CALL    ORA_connection_rollback (

IN  ora_connection    connection,

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*

======================================================================

sqlstmt Functions - orastmt.c

======================================================================*/

lresult ORADB_CALL    ORA_sqlstmt_create  (

OUT ora_sqlstmt

*

sqlstmt,

IN  ora_connection    connection,

INconstchar*

sql_block,

INintsql_len,/*-1 for strlen to be called*/

IN

ushortfetch_size,/*0 for default or bind array size for INSERT*/

OUT ora_error_t*error/*NULL for no err msg return*/

);

void

ORADB_CALL    ORA_sqlstmt_free  (

IN  ora_sqlstmt        sqlstmt

);/*executes a sql statement with no output parameters*/

lresult    ORADB_CALL    ORA_sqlstmt_execute  (

IN  ora_sqlstmt        sqlstmt,

IN  ORADBI_ExecMode mode,

/*execute mode: MOD_DEFAULT=0*/

IN

ushortiters,/*0 is default*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*executes a select sql statement and returns the result set*/

lresult    ORADB_CALL    ORA_sqlstmt_select  (

IN  ora_sqlstmt        sqlstmt,

IN  ORADBI_ExecMode mode,

/*execute mode: MOD_DEFAULT=0*/

OUT ora_rowset

*

rowset,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*binds a named variable to sqlstmt but for lob, when type is set to ODT_UNKNOWN type is taken from name's prefix*/

lresult    ORADB_CALL    ORA_sqlstmt_bind  (

IN  ora_sqlstmt        sqlstmt,

IN

constchar*name,/*param name bound*/

IN  ORADBI_DataType type,

/*param type bound. set ODT_UNKNOWN for simplely. cannot be a lob type*/

IN

intsize,/*param size for TEXT, LOB. 0 for others*/

OUT ora_param*param,/*a out param bound to sqlstmt*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*binds a named variable to sqlstmt only with lob type*/

lresult    ORADB_CALL    ORA_sqlstmt_bind_lob  (

IN  ora_sqlstmt        sqlstmt,

IN

constchar*name,/*param name bound*/

IN

intmax_size,/*maximum size of lob data, 0 for default. if 0, client_data must be a valid pointer*/

IN  ORADBI_InBind

*inbind,/*can be null. if null, max_size must be a  meaningful value not more than 65535*/

IN  ORADBI_OutBind

*outbind,/*can be null*/

OUT ora_param*param,/*a out param bound to sqlstmt*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*accesses param in the sqlstmt by name. gets a reference to param*/

ora_param    ORADB_CALL    ORA_sqlstmt_get_param_by_name  (

IN  ora_sqlstmt        sqlstmt,

IN

constchar*param_name,/*MUST be a valid name string*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*accesses param in the sqlstmt by index: 1-based. gets a reference to param*/

ora_param    ORADB_CALL    ORA_sqlstmt_get_param_by_index  (

IN  ora_sqlstmt        sqlstmt,

IN

ushortparam_index,/*PARAM_INDEX_BASE based*/

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*

======================================================================

rowset Functions - orarows.c

======================================================================*/

/*returns number of rows fetched so far*/

lresult    ORADB_CALL  ORA_rowset_num_rows (

IN  ora_rowset        rowset,

OUT size_t

*

num_rows,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns number of columns*/

lresult ORADB_CALL  ORA_rowset_num_columns (

IN  ora_rowset        rowset,

OUT size_t

*

num_cols,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*fetches next row of record. TRUE for NOT completed; FALSE for completed*/

BOOL ORADB_CALL  ORA_rowset_next (

IN  ora_rowset        rowset

);

/*frees a ora_rowset. a freed rowset handle is an invalid pointer and cannot be used any more*/

void

ORADB_CALL    ORA_rowset_free  (

IN  ora_rowset        rowset

);/*accesses column in the current row by name. gets a reference to column*/

ora_column    ORADB_CALL    ORA_rowset_get_column_by_name  (

IN  ora_rowset        rowset,

IN

constchar*col_name,/*MUST be a valid name string*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*accesses column in the current row by index: 1-based. gets a reference to column*/

ora_column    ORADB_CALL    ORA_rowset_get_column_by_index  (

IN  ora_rowset        rowset,

IN

ushortcol_index,/*COLUMN_INDEX_BASE based*/

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*

======================================================================

column Functions - oracol.c

======================================================================*/

/*returns column data type*/

ORADB_CALL1(

constchar*

) ORA_column_get_name  (

IN    ora_column        column

);/*returns column data type*/

ORADBI_DataType    ORADB_CALL    ORA_column_get_type  (

IN    ora_column        column

);

/*returns column display size*/

size_t    ORADB_CALL    ORA_column_get_dispsize  (

IN    ora_column        column

);

/*returns column precision of numberic data type*/

int

ORADB_CALL ORA_column_get_precision  (

IN    ora_column        column

);/*returns column scale of numberic data type*/

int

ORADB_CALL ORA_column_get_scale  (

IN    ora_column        column

);/*returns whether column is null ok*/

BOOL    ORADB_CALL    ORA_column_is_null_ok  (

IN    ora_column        column

);

/*returns whether column value is null*/

BOOL    ORADB_CALL    ORA_column_is_null  (

IN    ora_column        column

);

/*returns column value as string*/

lresult    ORADB_CALL    ORA_column_as_string  (

IN    ora_column        column,

OUT

char**outval,/*Returns address of pointer to actual data*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*returns column value as double*/

lresult    ORADB_CALL    ORA_column_as_double  (

IN    ora_column        column,

OUT

double*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns column value as float32*/

lresult    ORADB_CALL    ORA_column_as_float  (

IN    ora_column        column,

OUT

float*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns column value as long*/

lresult    ORADB_CALL    ORA_column_as_long  (

IN    ora_column        column,

OUT

long*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns column value as unsigned long*/

lresult    ORADB_CALL    ORA_column_as_ulong  (

IN    ora_column        column,

OUT

ulong*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns column value as int64*/

lresult    ORADB_CALL    ORA_column_as_longlong  (

IN    ora_column        column,

OUT longlong

*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns column value as uint64*/

lresult    ORADB_CALL    ORA_column_as_ulonglong  (

IN    ora_column        column,

OUT ulonglong

*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns column value as datetime*/

lresult    ORADB_CALL    ORA_column_as_datetime  (

IN    ora_column        column,

OUT ora_datetime

*

outval,

OUT ora_error_t*

error

);/*gets lob size for read. if a column isn't a LOB type or NULL, return 0*/

size_t    ORADB_CALL    ORA_column_lob_size (

IN    ora_column        column

);

/*read lob column value - pulling mode*/

/*

An example of pulling lob data with ORA_column_read_lob:

#define BUFF_SIZE    512

byte   lob_buf[BUFF_SIZE];

lob_siz = ORA_column_lob_size (col);

lob_data = (byte*) malloc (lob_siz);

cb_offs = 0;

cb_read = BUFF_SIZE;

while ((rc=ORA_column_read_lob (col, lob_siz, cb_offs, lob_buf, &cb_read, &err))==ORC_NEED_DATA || rc==ORC_SUCCESS)

{

memcpy (lob_data+cb_offs, lob_buf, cb_read);

cb_offs += cb_read;

if (rc==ORC_SUCCESS)

break;

cb_read = BUFF_SIZE;

}

ASSERT (cb_offs == lob_siz);*/

lresult    ORADB_CALL    ORA_column_read_lob  (

IN        ora_column    column,

IN        size_t        lobsize_to_read,

/*total bytes to read, usually is lob_size*/

IN      size_t        cb_offset,

/*offset bytes from the start of lob data*/

INOUT

byte*in_buf,/*when returned, in_buf has actual data*/

INOUT    size_t

*cb_read,/*input is buf size and output is size of bytes be read*/

OUT        ora_error_t

*error/*NULL for no err msg return*/

);

/*

returns lob column value as bytes once for all. out_buf is allocated by caller for fetch bytes.

*    buf_size is size of out_buf

*    ORA_column_as_bytes calls ORA_column_read_lob internally.*/

/*

An example of pulling lob data with ORA_column_as_bytes:

size_t lob_size = ORA_column_lob_size (col);

byte*  out_buf  = malloc (lob_size);

ORA_column_as_bytes (col, out_buf, &lob_size, NULL);

...

free (out_buf);*/

lresult    ORADB_CALL    ORA_column_as_bytes  (

IN        ora_column    column,

INOUT

byte*

out_buf,

INOUT    size_t*lob_size,/*size bytes of lob data which must <= size of buffer*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*

======================================================================

param Functions - oraparam.c

======================================================================*/

ORADBI_DataType    ORADB_CALL    ORA_param_get_type (

IN    ora_param        param

);

lresult    ORADB_CALL    ORA_param_set_long (

IN    ora_param        param,

IN

long

val,

OUT ora_error_t*error/*NULL for no err msg return*/

);

lresult    ORADB_CALL    ORA_param_set_ulong (

IN    ora_param        param,

IN

ulong

val,

OUT ora_error_t*error/*NULL for no err msg return*/

);

lresult    ORADB_CALL    ORA_param_set_longlong (

IN    ora_param        param,

IN  longlong        val,

OUT ora_error_t

*error/*NULL for no err msg return*/

);

lresult    ORADB_CALL    ORA_param_set_ulonglong (

IN    ora_param        param,

IN  ulonglong        val,

OUT ora_error_t

*error/*NULL for no err msg return*/

);

lresult    ORADB_CALL    ORA_param_set_datetime (

IN    ora_param        param,

IN  ora_datetime    val,

OUT ora_error_t

*error/*NULL for no err msg return*/

);

void

ORADB_CALL    ORA_param_set_null (

IN    ora_param        param

);

lresult    ORADB_CALL    ORA_param_set_float (

IN    ora_param        param,

INfloat

val,

OUT ora_error_t*error/*NULL for no err msg return*/

);

lresult    ORADB_CALL    ORA_param_set_double (

IN    ora_param        param,

IN

double

val,

OUT ora_error_t*error/*NULL for no err msg return*/

);

lresult    ORADB_CALL    ORA_param_set_string (

IN    ora_param        param,

IN

constchar*

val,

INshortlen,/*-1 for strlen called*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

lresult    ORADB_CALL    ORA_param_set_bytes (

IN    ora_param        param,

IN

constbyte*

in_buf,

INushort

size_buf,

OUT ora_error_t*error/*NULL for no err msg return*/

);

BOOL    ORADB_CALL    ORA_param_is_null (

IN    ora_param        param

);

/*returns column value as string*/

lresult    ORADB_CALL    ORA_param_as_string  (

IN    ora_param        param,

OUT

char**outval,/*Returns address of pointer to actual data*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*returns param value as double*/

lresult    ORADB_CALL    ORA_param_as_double  (

IN    ora_param        param,

OUT

double*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns param value as float32*/

lresult    ORADB_CALL    ORA_param_as_float  (

IN    ora_param        param,

OUT

float*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns param value as long*/

lresult    ORADB_CALL    ORA_param_as_long  (

IN    ora_param        param,

OUT

long*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns param value as unsigned long*/

lresult    ORADB_CALL    ORA_param_as_ulong  (

IN    ora_param        param,

OUT

ulong*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns param value as long*/

lresult    ORADB_CALL    ORA_param_as_longlong  (

IN    ora_param        param,

OUT longlong

*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns param value as unsigned long*/

lresult    ORADB_CALL    ORA_param_as_ulonglong  (

IN    ora_param        param,

OUT ulonglong

*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns param value as datetime*/

lresult    ORADB_CALL    ORA_param_as_datetime  (

IN    ora_param        param,

OUT ora_datetime

*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*returns param value as rowset*/

lresult    ORADB_CALL    ORA_param_as_rowset  (

IN    ora_param        param,

OUT ora_rowset

*

outval,

OUT ora_error_t*error/*NULL for no err msg return*/

);

/*

======================================================================

datetime Functions - oradate.c

======================================================================*/

/*creates a datetime opaque pointer which must be free after using*/

lresult    ORADB_CALL  ORA_datetime_create (

OUT    ora_datetime

*dt/*must be a valid pointer*/

);

lresult    ORADB_CALL  ORA_datetime_set_all  (

IN    ora_datetime        dt,

IN

shortyear,/*gregorian year; range is -4712 <= year <= 9999*/

IN  ORADBI_DTMonth        month,

/*month; range is 1 <= month 

IN

byteday,/*day; range is 1 <= day <= 31*/

IN

bytehours,/*hours; range is 0 <= hours <=23*/

IN

byteminutes,/*minutes; range is 0 <= minutes <= 59*/

IN

byteseconds,/*seconds; range is 0 <= seconds <= 59*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

void

ORADB_CALL  ORA_datetime_get_all  (

IN    ora_datetime        dt,

OUTshort*year,/*gregorian year; range is -4712 <= year <= 9999*/

OUT ORADBI_DTMonth

*month,/*month; range is 1 <= month 

OUT

byte*day,/*day; range is 1 <= day <= 31*/

OUT

byte*hours,/*hours; range is 0 <= hours <=23*/

OUT

byte*minutes,/*minutes; range is 0 <= minutes <= 59*/

OUT

byte*seconds/*seconds; range is 0 <= seconds <= 59*/

);

lresult    ORADB_CALL  ORA_datetime_set_fld  (

IN    ora_datetime        dt,

IN    ORADBI_DTField        dt_field,

IN

short

dt_val,

OUT ora_error_t*error/*NULL for no err msg return*/

);

short

ORADB_CALL  ORA_datetime_get_fld  (

IN    ora_datetime        dt,

IN    ORADBI_DTField        dt_field

);

lresult    ORADB_CALL  ORA_string_to_datetime  (

INconstchar*dt_string,/*datetime string such as: 1975-08-14 12:53:42*/

IN

char*dt_format,/*datetime format such as: yyyy-mm-dd hh:uu:ss*/

OUT    ora_datetime        dt_to,

/*datetime that string translated to*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

lresult    ORADB_CALL  ORA_datetime_to_string  (

IN    ora_datetime        dt_in,

/*datetime to be translated*/

IN

char*dt_format,/*datetime format such as: yyyy-mm-dd hh:uu:ss*/

OUT

char*string_to,/*datetime string such as: 1975-08-14 12:53:42*/

OUT ora_error_t

*error/*NULL for no err msg return*/

);

/*frees a ora_datetime*/

void

ORADB_CALL  ORA_datetime_free  (

IN    ora_datetime        dt

);

#ifdef __cplusplus

}#endif

/*====================================================================*/

#endif/* ndef ORADBI_H_INCLUDED . cheungmine@gmail.com */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值