OCI常用函数的函数说明 下面这些OCI函数到底是在哪个lib库中实现的?用的是ORA...

OCI\u5e38\u7528\u51fd\u6570\u7684\u5927\u81f4\u6b65\u9aa4

\u4e00\u3001 \u5b9a\u4e49\u5e76\u521d\u59cb\u5316\u6240\u9700\u5404\u53d8\u91cfenvhp\u3001srvhp\u3001errhp\u3001svchp\u3001authp\u3001hndlp\u3001stmthp\u3001\u7b49\u7b49\u4e8c\u3001\u8fde\u63a5\u6570\u636e\u5e931\u3001 OCIInitialize\u3002\u521d\u59cb\u5316OCI\u7a0b\u5e8f\u73af\u58832\u3001OCIEnvInit\u3002 \u521d\u59cb\u5316OCI\u73af\u5883\u53e5\u67c43\u3001 OCIHandleAlloc\u3002\u5206\u914d\u5404\u53e5\u67c4\uff0c\u9700\u8981\u5206\u914d\u7684\u53e5\u67c4\u7c7b\u578b\u5982\u4e0b\uff1aOCI_HTYPE_SVCCTX,OCI_HTYPE_ERROR,OCI_HTYPE_SESSION,OCI_HTYPE_SERVER,4\u3001 OCIServerAttach\u3002\u6307\u5b9a\u8d44\u6599\u6e90\u8def\u5f845\u3001 OCIAttrSet\u3002\u8bbe\u7f6e\u5404\u9879\u53c2\u6570\u3002\u9700\u8981\u8bbe\u7f6e\u7684\u53c2\u6570\u7c7b\u578b\u5982\u4e0b\uff1aOCI_ATTR_SERVER \u4f7f\u7528\u7684\u53e5\u67c4\u578b\u4e3aOOCI_HTYPE_SVCCTXOCI_ATTR_USERNAMEOCI_ATTR_PASSWORD\u4e0a\u9762\u4e24\u4e2a\u53c2\u6570\u4f7f\u7528\u7684\u53e5\u67c4\u7c7b\u578b\u4e3aOCI_HTYPE_SESSION6\u3001 OCISessionBegin\u3002\u521b\u5efa\u5e76\u5f00\u59cb\u4f1a\u8bdd7\u3001 OCIAttrSet\u3002\u8bbe\u7f6e\u4f1a\u8bdd\u53c2\u6570\u7c7b\u578bOCI_ATTR_SESSION\uff0c\u4f7f\u7528\u53e5\u67c4\u4e3aOCI_HTYPE_SVCCTX8\u3001 OCIHandleAlloc\u3002\u5206\u914dOCI_HTYPE_STMT\u578b\u9648\u8ff0\u53e5\u67c4\u4e09\u3001\u64cd\u4f5c\u6570\u636e\u5e931\u3001OCIStmtPrepare\u3002\u51c6\u5907\u4e8b\u4ef6\u5904\u74062\u3001OCIBindByPos\u3001OCIBindByName\uff08OCIDefineByPos\uff09\u7ed1\u5b9a\uff08\u5b9a\u4e49\uff09\u53d8\u91cf\u3002\u5982\u679c\u662f\u591a\u884c\u8d44\u6599\uff0c\u5219\u9700\u8981\u4f7f\u7528OCIBindArrayOfStruct(OCIDefineArrayOfStruct)\u51fd\u6570\u6765\u7ed1\u5b9a\uff08\u5b9a\u4e49\uff09\u5b58\u653e\u8be5\u6570\u636e\u7684\u6570\u7ec43\u3001OCIStmtExecute\u3002\u6267\u884cSQL\u8bed\u53e54\u3001OCITransCommit\uff08OCITransRollback\uff09\u3002\u63d0\u4ea4\uff08\u56de\u6eda\uff09\u5f53\u524d\u4e8b\u52a1\u56db\u3001\u65ad\u5f00\u6570\u636e\u5e931\u3001OCISessionEnd\u3002\u7ed3\u675f\u4f1a\u8bdd2\u3001OCIServerDetach\u3002\u65ad\u5f00\u4e0e\u670d\u52a1\u5668\u7684\u8fde\u63a53\u3001OCIHandleFree\u3002\u91ca\u653e\u5df2\u5206\u914d\u7684\u5404\u53e5\u67c4\u3002\u9700\u8981\u91ca\u653e\u7684\u53e5\u67c4\u5982\u4e0b\uff1aOCI_HTYPE_SVCCTX,OCI_HTYPE_ERROR,OCI_HTYPE_SESSION,OCI_HTYPE_SERVER,OCI_HTYPE_STMTOCI_HTYPE_ENV\u4e94\u3001\u63d0\u53d6\u51fa\u9519\u63cf\u8ff0\u4fe1\u606f1\u3001OCIErrorGet\u3002\u4e0a\u8ff0\u5404\u51fd\u6570\u82e5\u6267\u884c\u5931\u8d25\uff0c\u90fd\u53ef\u4ee5\u4f7f\u7528\u8be5\u51fd\u6570\u6765\u63d0\u53d6\u51fa\u9519\u4fe1\u606f\u7684ORCALE\u63cf\u8ff0\u3002

\u4e00\u3001\u5f00\u59cb\u524d\u7684\u51c6\u5907\u5de5\u4f5c
\u5728\u4f7f\u7528OTL\u8fdb\u884c\u7f16\u7a0b\u4e4b\u524d\uff0c\u8981\u9996\u5148\u786e\u5b9a\u4f7f\u7528\u7684Oralce\u7248\u672c\u4ee5\u53ca\u6240\u9009\u7528\u7684\u5b57\u7b26\u96c6\u3002OTL\u652f\u6301\u76ee\u524d\u51e0\u4e4e\u6240\u6709\u7684\u4e3b\u6d41\u6570\u636e\u5e93\uff0c\u53ef\u4ee5\u901a\u8fc7\u5b8f\u542f\u7528otlv4.h\u4e2d\u5bf9\u5e94\u7684\u6570\u636e\u5e93\u64cd\u4f5c\u63a5\u53e3\u3002
\u5982\uff1a\u4f7f\u7528Oracle 11g R2\u3001\u5b57\u7b26\u96c6\u9009\u62e9UTF8\uff0c\u5219\u53ef\u5728\u5305\u542botlv4.h\u4e4b\u524d\u58f0\u660e\u4ee5\u4e0b\u4e24\u4e2a\u5b8f\uff1a
#define OTL_ORA11G_R2
#define OTL_ORA_UTF8
#include "otlv4.h"
....
\u4e8c\u3001\u5e38\u7528\u7c7b\u53ca\u5176\u5e38\u7528\u6210\u5458
1. otl_connect\u7c7b
static int otl_initialize(const int threaded_mode=0):

\u7528\u4e8e\u521d\u59cb\u5316OTL\u73af\u5883\u7684\u9759\u6001\u51fd\u6570\uff0c\u53c2\u6570\u6307\u5b9a\u662f\u7528\u4e8e\u591a\u7ebf\u7a0b\u8fd8\u662f\u5355\u7ebf\u7a0b\u3002\u5b83\u4e0d\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u591a\u4e2a\u7ebf\u7a0b\u5171\u4eab\u4f7f\u7528\u4e00\u4e2aotl_connect\u5bf9\u8c61\uff0c\u9700\u8981\u52a0\u9501\u8fdb\u884c\u63a7\u5236\u3002\u6709\u4e2a\u540c\u4e8b\u56e0\u4e3a\u5728\u591a\u7ebf\u7a0b\u73af\u5883\u4e0b\u4f7f\u7528\u4e86\u9ed8\u8ba4\u7684\u53c2\u65700\uff0c\u5c31\u5bfc\u81f4\u4e86\u7a0b\u5e8f\u5f02\u5e38\u3002\u4f46\u662f\u5355\u7ebf\u7a0b\u73af\u5883\u4e0b\uff0c\u53c2\u6570\u8bbe1\u662f\u6ca1\u6709\u95ee\u9898\u7684\u3002\u6240\u4ee5\uff0c\u53ef\u4ee5\u8003\u8651\u5c06\u6b64\u53c2\u6570\u76f4\u63a5\u8bbe\u4e3a1\u3002
void rlogon(...)\uff1a

\u8fd9\u4e2a\u51fd\u6570\u6709\u591a\u4e2a\u7248\u672c\uff0c\u8bf7\u6ce8\u610f\u53c2\u8003\u5b98\u65b9\u6587\u6863\u4e2d\u4e0e\u76f8\u5e94\u6570\u636e\u5e93\u7248\u672c\u5bf9\u5e94\u7684\u51fd\u6570\u58f0\u660e\u300211g\u4e2d\u7528\u5230\u7684\u53c2\u6570\u8bf4\u660e\u5982\u4e0b\uff1a
const char *connect_str:\u8fde\u63a5\u5b57\u7b26\u4e32\uff0c\u683c\u5f0f\u4e3a\uff1a"\u7528\u6237\u540d/\u5bc6\u7801@\u6570\u636e\u5e93\u670d\u52a1\u540d"
const int aauto_commit:\u81ea\u52a8\u63d0\u4ea4\u6a21\u5f0f\u3002\u82e5\u6b64\u53c2\u6570\u8bbe\u4e3a0\uff08\u9ed8\u8ba4\uff09\uff0c\u5219\u901a\u8fc7\u6b64\u8fde\u63a5\u5bf9\u8c61\u6267\u884c\u7684\u4e8b\u52a1\u4e0d\u4f1a\u81ea\u52a8\u63d0\u4ea4\u3002\u5982\u4f7f\u7528direct_exec\u6267\u884c\u5220\u9664\u8bb0\u5f55\u7684\u64cd\u4f5c\u65f6\uff0c\u9700\u8981\u624b\u52a8\u8c03\u7528commit()\u6210\u5458\u51fd\u6570\u63d0\u4ea4\u4e8b\u52a1\uff1b\u82e5\u8bbe\u4e3a1\u5219\u901a\u8fc7\u6b64otl_connect\u5bf9\u8c61\u5f00\u542f\u7684\u4e8b\u52a1\u4f1a\u81ea\u52a8\u63d0\u4ea4\u3002
long direct_exec(...)\uff1a
const char *sqlstm: \u6307\u5b9a\u6240\u8981\u6267\u884c\u7684\u201c\u9759\u6001SQL\u8bed\u53e5\u201d\uff0c\u5373\u4e0d\u4ea7\u751f\u8f93\u5165\u6216\u8f93\u51fa\u7684SQL\u8bed\u53e5\u3002\u5982delete from book where name='c++\u2018 \u3002\u4f46\u662f\u4e0d\u80fd\u6267\u884c\u5982select sysdate from dual\u6216select * from book\u4ea6\u6216delete from book where name=:f1\u4e4b\u7c7b\u7684\u8bed\u53e5\uff0c\u56e0\u4e3a\u5b83\u4eec\u4f1a\u5e26\u6709\u8f93\u5165\u6216\u8f93\u51fa\uff0c\u6b64\u7c7bSQL\u8bed\u53e5\u53ef\u4ee5\u901a\u8fc7otl_stream\u5b9e\u73b0\uff0c\u4e0b\u9762\u4f1a\u6709\u4ecb\u7ecd\u3002
int ignore_error:\u662f\u5426\u5ffd\u7565\u5f02\u5e38\u3002\u53ef\u4ee5\u6307\u5b9aotl_exception::disable\u7981\u7528\u5f02\u5e38\uff0c\u5426\u5219\u7a0b\u5e8f\u9700\u8981\u4f7f\u7528try...catch(otl_exception &e)...\u6355\u83b7\u5e76\u5904\u7406\u5f02\u5e38\u3002
int connected:

\u6b64\u6210\u5458\u53d8\u91cf\u6807\u8bc6\u4e86\u8fde\u63a5\u5bf9\u8c61\u662f\u5426\u8fde\u63a5\u6210\u529f\uff0c\u4e00\u65e6\u8fde\u63a5\u6210\u529f\u5176\u503c\u5373\u4e3a1\u3002\u5373\u4fbf\u540e\u6765\u7f51\u7edc\u65ad\u6389\u4e86\uff0c\u6b64\u503c\u4ecd\u65e7\u4fdd\u6301\u4e0d\u53d8\uff0clogoff()\u540e\u6b64\u503c\u53d8\u4e3a0\u3002\u6240\u4ee5\u6b64\u53d8\u91cf\u53ea\u80fd\u7528\u4e8e\u68c0\u67e5rlogon\u662f\u5426\u8fde\u63a5\u6210\u529f\uff0c\u800c\u4e0d\u80fd\u5224\u65ad\u5f53\u524d\u4e0e\u6570\u636e\u5e93\u7684\u8fde\u63a5\u662f\u5426\u6b63\u5e38\u3002

2. otl_stream\u7c7b
void open(...):

\u4e3a\u6d41\u5bf9\u8c61\u5173\u8054\u4e00\u4e2aSQL\u8bed\u53e5\uff0c\u53ef\u4ee5\u662f\u5e26\u8f93\u5165\u6216\u8f93\u51fa\u7684SQL\u8bed\u53e5\u6216PL/SQL\u5757\u3002
const int arr_size:\u6307\u5b9a\u6d41\u7f13\u51b2\u533a\u7684\u5927\u5c0f\u3002\u4f5c\u4e3a\u8f93\u51fa\u6d41\u4f7f\u7528\u65f6\uff0c\u82e5\u8f93\u51fa\u7f13\u51b2\u533a\u4e2d\u7684\u8bb0\u5f55\u6570\u8fbe\u5230\u6b64\u503c\u5373\u7f13\u51b2\u533a\u6ee1\u65f6\uff0c\u4f1a\u81ea\u52a8\u5237\u65b0\u7f13\u51b2\u533a\uff0c\u82e5\u5df2\u8bbe\u8bbe\u7f6e\u4e86\u81ea\u52a8\u63d0\u4ea4\u5219\u4e00\u5e76\u63d0\u4ea4\u6570\u636e\uff08\u9ed8\u8ba4\uff09;
const char *sqlstm:SQL\u8bed\u53e5\uff0c\u53ef\u4ee5\u6307\u5b9a\u7ed1\u5b9a\u53d8\u91cf\uff0c\u5982\uff1adelete from book where id = :f1 and price = :f2\uff1b
otl_connect &db:\u6d41\u6240\u4f7f\u7528\u7684\u6570\u636e\u5e93\u8fde\u63a5\u5bf9\u8c61\u3002
void set_commit(int auto_commit=0):

\u8bbe\u7f6e\u6d41\u88ab\u5237\u65b0\u65f6\u5426\u81ea\u52a8\u63d0\u4ea4\u4e8b\u52a1\u3002\u4e24\u79cd\u6761\u4ef6\u4e0b\u6d41\u4f1a\u88ab\u5237\u65b0\uff1aa.\u7f13\u51b2\u533a\u6ee1 b.\u624b\u52a8\u8c03\u7528flush\u6210\u5458\u51fd\u6570
void flush(...):

\u6267\u884c\u548c\u6d41\u5173\u8054\u7684SQL\u8bed\u53e5\u3002\u5982\u6267\u884c\uff1a
otl_stream delStream;
delStream.open(100, delete from book where id = :f1 and price = :f2, dbConnect); //\u6b63\u5e38\u60c5\u51b5\u4e0b\u5411\u6d41\u4e2d\u52a0\u5165100\u6761\u8bb0\u5f55\u65f6\u624d\u6267\u884c\u5220\u9664
delStream << 1;
delSteam << 'C++';
delStream.flush(); //\u7acb\u5373\u6267\u884c\u5220\u9664\u64cd\u4f5c\uff0c\u5c3d\u7ba1\u5f53\u524d\u6d41\u4e2d\u53ea\u6709\u4e00\u6761\u8bb0\u5f55
long get_rpc():

\u83b7\u53d6\u6d41\u4e2dSQL\u8bed\u53e5\u6267\u884c\u540e\u6240\u5f71\u54cd\u5230\u7684\u8bb0\u5f55\u6570\uff0c\u5982\u63d2\u5165100\u6761\u8bb0\u5f55\uff0c\u5219\u8c03\u7528\u6b64\u51fd\u6570\u8fd4\u56de\u7684\u5373\u4e3a100
int good():

\u5224\u65ad\u6d41\u5bf9\u8c61\u662f\u5426\u5df2\u6b63\u5e38\u6253\u5f00\uff0c\u5df2\u6253\u5f00\u8fd4\u56de1\u3002\u6ce8\u610f\uff1a\u82e5\u590d\u7528\u4e00\u4e2a\u6d41\u5bf9\u8c61\u65f6\uff0c\u5fc5\u987b\u5148\u8c03\u7528close\u51fd\u6570\u5c06\u5176\u5173\u95ed\uff0c\u7136\u540e\u518d\u8c03\u7528open\u91cd\u65b0\u6253\u5f00\u3002
int get_dirty_buf_len():

\u83b7\u53d6\u5f53\u524d\u6d41\u5bf9\u8c61\u7f13\u51b2\u533a\u4e2d\u7684\u8bb0\u5f55\u6570\uff0c\u5176\u6700\u5927\u503c\u4e3a\u7f13\u51b2\u533asize-1\u3002\u6bcf\u5f53\u7f13\u51b2\u533a\u6ee1\u65f6\u4f1a\u81ea\u52a8\u5237\u65b0\uff0c\u5237\u65b0\u540e\u518d\u8c03\u7528\u6b64\u51fd\u6570\u65f6\u8fd4\u56de0

3.otl_exception\u7c7b
\u8be5\u7c7b\u7684\u51e0\u4e2a\u6210\u5458\u7528\u4e8e\u8868\u793a\u5f02\u5e38\u7684\u4fe1\u606f\uff0c\u5982\uff1a
char stm_text[2048]:\u51fa\u9519\u7684SQL\u8bed\u53e5\uff1b
char var_info[256]:\u82e5\u5728\u6d41\u4e2d\u4f7f\u7528\u4e86\u4e0e\u5b9e\u9645\u7c7b\u578b\u4e0d\u7b26\u7684\u7ed1\u5b9a\u53d8\u91cf\uff0c\u6b64\u6570\u7ec4\u7684\u503c\u4e3a\u7ed1\u5b9a\u53d8\u91cf\u7684\u4fe1\u606f\uff1b
unsigned char msg[1000]:\u8fd9\u4e2a\u6211\u6bd4\u8f83\u559c\u6b22\u7528\uff0c\u6b64\u6570\u7ec4\u663e\u793a\u51fa\u5177\u4f53\u7684\u5f02\u5e38\u4fe1\u606f\uff08\u5305\u62ecoracle\u8fd4\u56de\u7684\u9519\u8bef\u7801\uff09\uff0c\u5982\u8fde\u63a5\u8d85\u65f6\u7b49\u7b49\u3002

\u4e09\u3001\u5bf9\u4e8e\u7f51\u7edc\u5f02\u5e38\u7684\u5904\u7406
\u73b0\u5728\u9879\u76ee\u5bf9\u4e8e\u7a0b\u5e8f\u7684\u5f02\u5e38\u5904\u7406\u80fd\u529b\u8981\u6c42\u8d8a\u6765\u8d8a\u9ad8\uff0c\u6bd4\u5982\u7f51\u7edc\u4e2d\u65ad\u6216\u6570\u636e\u5e93\u51fa\u73b0\u5f02\u5e38\u7b49\uff0c\u8981\u6c42\u5728\u6545\u969c\u6062\u590d\u540e\uff0c\u7a0b\u5e8f\u80fd\u6b63\u5e38\u4e0e\u6570\u636e\u5e93\u4fdd\u6301\u8fde\u63a5\uff0c\u4f7f\u4e1a\u52a1\u5c3d\u53ef\u80fd\u7684\u5c11\u53d7\u5f71\u54cd\u3002\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u6cd5\u89e3\u51b3\u6b64\u79cd\u60c5\u51b5\u3002\u8fd9\u4e5f\u662f\u6298\u78e8\u4e86\u6211\u4e24\u5929\u7684\u4e00\u4e2a\u95ee\u9898\uff1a(
\u9996\u5148\uff0c\u7a0b\u5e8f\u8981\u5728\u63d0\u4ea4\u6570\u636e\u7684\u5730\u65b9\u4f7f\u7528try...catch\u6355\u83b7otl_exception\u5f02\u5e38\uff0c\u5f53\u63d0\u4ea4\u5931\u8d25\u65f6\uff0cotl\u4f1a\u629b\u51fa\u6b64\u5f02\u5e38\u5e76\u643a\u5e26\u5f02\u5e38\u4fe1\u606f\uff1b
\u5176\u6b21\uff0c\u8981\u5728\u6355\u83b7\u5230\u5f02\u5e38\u4e4b\u540e\uff0c\u5173\u95ed\u4e4b\u524d\u7684\u8fde\u63a5\u5bf9\u8c61\uff08\u5982\u679c\u6709\u6d41\u4f7f\u7528\u6b64\u8fde\u63a5\u5bf9\u8c61\uff0c\u5219\u4e00\u5b9a\u8981\u5148\u5173\u95ed\u6d41\u5bf9\u8c61\uff0c\u7136\u540e\u518d\u65ad\u5f00otl_connect\u5bf9\u8c61\uff09\uff1b
\u6700\u540e\uff0c\u91cd\u65b0\u8fde\u63a5\u6570\u636e\u5e93\u5e76\u518d\u6b21\u521d\u59cb\u5316\u6d41\u5bf9\u8c61\u3002
\u5982\uff1a

void ReConnect(otl_connect &otlConnect, const char *pConnStr, int iAutoCommit);

....
//\u58f0\u660eotl\u5bf9\u8c61\u5e76\u521d\u59cb\u5316\u5bf9\u8c61
otl_connect dbConn;
otl_stream outStream;

void Init(void)
{
try
{
otl_connect::otl_initialize(1);
dbConn.rlogon("test1/password@testdb");
outStream.open(100, "insert into book values(:f1, :f2, :f3, :f4)", dbConn);
outStream.set_commit(1);
}
catch (otl_exception &e)
{
//\u5904\u7406\u5f02\u5e38
}
}

//\u63d0\u4ea4\u6570\u636e\u7684\u51fd\u6570
void Submit(void)
{
try
{
for (int i = 0; i < 5000; i++)
{
outStream << i;
outStream << "abc";
outStream << i;
outStream << "null";
}
}
catch(otl_exception &e)
{
//\u63d0\u4ea4\u6570\u636e\u5f02\u5e38\uff0c\u91cd\u65b0\u8fde\u63a5\u6570\u636e\u5e93\u5e76\u91cd\u65b0\u521d\u59cb\u5316\u6d41\u5bf9\u8c61
outStream.close(); //\u5fc5\u987b\u5148\u5173\u95ed\u6d41\u5bf9\u8c61\u3002\u82e5\u5148\u65ad\u5f00\u8fde\u63a5\u4f1a\u51fa\u73b0\u5173\u95ed\u6d41\u5bf9\u8c61\u65f6\u62a5OCIHandleFree\u5f02\u5e38\u5bfc\u81f4\u6d41\u5bf9\u8c61\u65e0\u6cd5\u6b63\u5e38\u5173\u95ed\u5f15\u8d77\u5185\u5b58\u6cc4\u6f0f
ReConnect\uff08dbConn, "test1/password@testdb", 0);
outStream.open(100, "insert into book values(:f1, :f2, :f3, :f4)", dbConn);
outStream.set_commit(1);
}
}

//\u91cd\u65b0\u8fde\u63a5\u8fde\u63a5\u6570\u636e\u5e93\u51fd\u6570
void ReConnect(otl_connect &otlConnect, const char *pConnStr, int iAutoCommit)
{
if (1 == otlConnect.connected)
{
otlConnect.logoff();
}
Retry:
try
{
otlConnect.rlogon(pConnStr, iAutoCommit);
}
catch (otl_exception &e)
{
Sleep(1000);
goto Retry;
}
}
\u8fd9\u6837\uff0c\u8c03\u7528Submit\u51fd\u6570\u63d0\u4ea4\u6570\u636e\u65f6\uff0c\u5c31\u6709\u4e86\u7f51\u7edc\u5f02\u5e38\u5904\u7406\u529f\u80fd\uff0c\u82e5\u63d0\u4ea4\u5931\u8d25\u5219\u4f1a\u4e00\u76f4\u5c1d\u8bd5\u91cd\u65b0\u8fde\u63a5\uff0c\u76f4\u5230\u8fde\u63a5\u6210\u529f\u4e3a\u6b62\u3002

函数原型:sword OCIInitialize (ub4 mode,CONST dvoid *ctxp,CONST dvoid *(*malocfp) (/* dvoid *ctxp,size_t size _*/),
CONST dvoid *(*ralocfp)(/*_ dvoid *ctxp,dvoid *memptr,size_t newsize _*/),
CONST void (*mfreefp)(/*_ dvoid *ctxp,dvoid *memptr _*/))
参数说明:
mode——详细说明OCI初始化(Initialize)模式(mode)。它的取值如下:
OCI_DEFAULT——缺省模式;
OCI_THREADED——多线程模式;在该模式下,各并发处理中不为用户所见的内在数据结构受各自线程的保护,而不受别的线程干扰;
OCI_OBJECT——使用目标特性;
OCI_SHARED——使用共享内存;
OCI_EVENTS——
Mode参数可以拥有多个值,以“|”符号分隔各取值项。
*Ctxp——用户定义的内存回调程序;默认为0
*(*malocfp)——用户定义的内存分配程序;默认为0
*(*ralocfp)——重新分配内存程序;默认为0
*memptr 是指向内存块的指针;
*mfreefp——用户定义的内存释放程序;默认为0
该函数使用举例如下:
OCIInitialize((ub4) OCI_THREADED | OCI_OBJECT,
(dvoid *)0,(dvoid *(*)(dvoid *, size_t)) 0,
(dvoid * (*)(dvoid *,dvoid *,size_t))0,
(void (*)(dvoid *,dvoid *)) 0 )
注意!OCIEnvCreate() 可以代替OCIInitialize() 和OCIEnvInit() 在初始化OCI程序环境以后,使用OCIEnvInit来初始化OCI的环境句柄,该函数成功返回0。
函数原型:swordOCIEnvInit(OCIEnv **envhpp,
ub4 mode,
size_t xtramemsz,
dvoid **usrmempp )
参数说明:
**envhpp——指向环境句柄的指针;
mode——指定初始化环境句柄的模式,其取值如下:
OCI_DEFAULT——缺省模式;在缺省模式下,OCI库始终互斥各环境句柄;
OCI_NO_MUTEX——非互斥模式;在该模式下,OCI库各环境句柄并不互斥,所有的掉用都使用同一个环境句柄,并且只能有一个环境句柄起作用。
OCI_ENV_NO_UCB——禁止回滚模式;该模式用以禁止在环境句柄初始化过程中的动态CALL_BACK函数掉用;
Xtramemsz——指定在该环境句柄生存期内分配内存的数量;
**usrmempp——指向Xtramemsz参数的指针;usermempp参数是函数返回值;
该函数使用举例如下:
应用例子:OCIEnvInit((OCIEnv **) envhp,
(ub4) OCI_DEFAULT,
(size_t) 0,(dvoid **) 0) 一个OCI连接在建立前,还需要将所需要的句柄一一分配成功,在OCI8里,使用函数OCIHandleAlloc来分配各句柄,成功返回0。
函数原型:sword OCIHandleAlloc(CONST dvoid *parenth,
dvoid **hndlpp,
ub4 type,
size_t xtramem_sz,
dvoid **usrmempp )
参数说明:
*parenth——已初始化后的环境句柄;
**hndlpp——函数执行成功后,返回的一个OCI句柄;该返回值的具体含义由type参数来决定;
type——参数hndlpp的返回值的类型;其常用取值如下:
OCI_HTYPE_SVCCTX——返回一个服务类型的句柄;
OCI_HTYPE_ERROR——返回一个错误类型的句柄;
OCI_HTYPE_SESSION——返回一个会话类型的句柄;
OCI_HTYPE_SERVER——返回一个服务器类型的句柄;
OCI_HTYPE_STMT——返回一个陈述类型的句柄;
其中,陈述类型的句柄是在创建与数据库会话成功后,将要对数据库进行操作时分配的,其余类型的句柄是在环境句柄初始化后分配的;
xtramem_sz——指定在该句柄生存期内分配内存的数量;
**usrmempp——指向xtramem_sz参数的指针,由函数返回;
该函数使用举例如下:OCIHandleAlloc((dvoid *) *envhp,
(dvoid **) errhp,
(ub4) OCI_HTYPE_ERROR,
(size_t) 0,
(dvoid **) 0) (以给定的方式设置服务器连接指针的参数)。
分配各OCI句柄后,还需要做的工作是为OCI操作数据源创建存储路径,并将各项参数设置到相应的句柄中,这项工作由函数OCIServerAttach和OCIAttrSet来实现。成功,返回0。
函数原型:sword OCIServerAttach(OCIServer *srvhp,
OCIError *errhp,
CONST text *dblink,
sb4 dblink_len,
ub4 mode )
参数说明:
*srvhp——已分配成功的服务器句柄;
*dblink——登陆数据库的实例名;
dblink_len——参数*dblink字符串的长度;
mode——指定不同操作的模式。现在只有一种模式可选:OCI_DEFAULT。
该函数使用举例如下:OCIServerAttach(srvhp, errhp,
(text *) cstring,
(sb4) strlen((char *)cstring), (ub4) OCI_DEFAULT))
函数原型:sword OCIAttrSet (CONST dvoid *trgthndlp,
ub4 trghndltyp,
dvoid *attributep,
ub4 *sizep,
ub4 attrtype,
OCIError *errhp )
参数说明:
*trgthndlp——需要设置的句柄,该句柄在这之前已分配成功;该参数由trghndltyp参数决定;
trghndltyp——参数trgthndlp的类型,其取值参见OCIHandleAlloc函数说明中的type参数说明;
*attributep——设置参数trgthndlp的值;
*sizep——attributep参数指向的字符串长度;
attrtype——参数attributep的类型;其取值如下:
OCI_ATTR_SERVER——服务器类型;
OCI_ATTR_USERNAME——用户名类型
OCI_ATTR_PASSWORD——用户密码类型
OCI_ATTR_SESSION——会话类型;
该函数使用举例如下:OCIAttrSet((dvoid *) svchp,
(ub4) OCI_HTYPE_SVCCTX,
(dvoid *) srvhp,
(ub4) 0,
(ub4) OCI_ATTR_SERVER,
errhp))
(注:此时该函数的意思是将服务器句柄设置到服务句柄中,其类型为服务器类型)
说明:在登陆数据库前以给定的方式设置服务器连接指针的参数时,attrtype参数的所有类型都需要设置到服务句柄中。设置的步骤为:先将服务器句柄设置到服务句柄中,然后将用户名、密码设置到会话句柄中,在调用OCISessionBegin函数成功后,再将会话句柄设置到服务句柄中。 创建和开始与数据库的会话使用函数OCISessionBegin来实现,其目的是建立与数据库的会话连接;函数成功,返回0。
函数原型:sword OCISessionBegin (OCISvcCtx *svchp,
OCIError *errhp,
OCISession *authp,
ub4 credt,
ub4 mode))
参数说明:
*svchp——已分配并设置成功的服务句柄;
*authp——已分配并设置了用户名、密码的会话句柄;
credt——建立用户会话的类型;其取值如下:
OCI_CRED_RDBMS——需要使用用户名和密码来建立会话;
OCI_CRED_EXT——不需要使用用户名和密码来建立会话;
mode——操作的模式;其取值如下:
OCI_DEFAULT——缺省模式;在该模式下只支持一个会话句柄;
OCI_MIGRATE——移动会话模式;在该模式下,新的会话连接会以不同的会话句柄返回;使用该模式创建新的会话时,必须已存在一个不可移动会话模式的会话连接。也就是说,一个移动会话模式的会话连接必须有一个不可移动模式的连接作为父连接;
OCI_SYSDBA——在该模式下,会鉴别用户是否以SYSDBA形式对数据库进行访问;
OCI_SYSOPER——在该模式下,会鉴别用户是否以SYSOPER形式对数据库进行访问;
OCI_PRELIM_AUTH——这种模式和OCI_SYSDBA、OCI_SYSOPER一起使用,作为某些访问任务的鉴别;
该函数使用举例如下:OCISessionBegin(svchp,
errhp,
authp,
OCI_CRED_RDBMS,
OCI_DEFAULT) 若某函数执行出错,则可以使用函数OCIErrorGet来取得错误原因,从而能得到某些提示。
函数原型:sword OCIErrorGet (dvoid *hndlp,
ub4 recordno,
text *sqlstate,
sb4 *errcodep,
text *bufp,
ub4 bufsiz,
ub4 type )
参数说明:
*hndlp——错误类型句柄errhp;
recordno——错误查找的原始位置,从1开始,其缺省值为1;
*sqlstate——OCI8不支持,缺省值为NULL;
*errcodep——ORACLE错误返回代码,由函数返回;初始值可以为(sb4)0;
*bufp——错误信息提示,由函数以字符串形式返回;
bufsiz——bufp参数原始字符串长度;
type——句柄类型;其取值为OCI_HTYPE_ERR或着为OCI_HTYPE_ENV;缺省值为OCI_HTYPE_ERR;
该函数使用举例如下:OCIErrorGet((dvoid *) errhp,
(ub4) 1,
(text *) NULL,
&errcode,
(text *)msgbuf,
(ub4) sizeof(msgbuf),
(ub4) OCI_HTYPE_ERROR) 用户定义的SQL或PL/SQL陈述语句。
在执行SQL或PL/SQL语句前,需要对该语句执行分析、出错检查,并和陈述句柄绑定起来,使用函数OCIStmtPrepare来进行这一系列操作。该函数在执行陈述语句前必须使用;成功,返回0;
函数原型:sword OCIStmtPrepare ( OCIStmt *stmtp,
OCIError *errhp,
CONST text *stmt,
ub4 stmt_len,
ub4 language,
ub4 mode)
参数说明:
*stmtp——已分配成功的陈述句柄;
*stmt——用户定义的需要执行的SQL或PL/SQL陈述语句;
stmt_len——用户定义的需要执行的陈述语句的长度;该参数的值不能为0;
language——语法模式;声明是本地语法,还是V7模式语法。其取值如下:
OCI_V7_SYNTAX——ORACLE的V7分析语法;
OCI_NTV_SYNTAX——语法依赖于服务器的版本;
mode——模式;其缺省值为OCI_DEFAULT;
该函数使用举例如下:OCIStmtPrepare(stmthp,
errhp,
sqlcommand,
(ub4)strlen((char *)sqlcommand),
(ub4) OCI_NTV_SYNTAX,
(ub4) OCI_DEFAULT) OCI执行陈述语句后,将所选择的变量值返回输出,此时需有用户定义的地址空间来容纳这些返回值。使用函数OCIDefineByPos通过在陈述语句中标志某变量在用户定义的变量集合中的位置来定义变量;若该函数执行成功,返回0。
函数原型:sword OCIDefineByPos (OCIStmt *stmtp,
OCIDefine **defnpp,
OCIError *errhp,
ub4 position,
dvoid *valuep,
sb4 value_sz,
ub2 dty,
dvoid *indp,
ub2 *rlenp,
ub2 *rcodep,
ub4 mode )
参数说明:
**defnpp——用户定义的变量集合的指针;该参数指针从下标0开始,依次递增一个数组单元;
position——需要定义的变量在定义句柄的列表中的位置,从1开始;例如:
SELECT empno, ssn, mgrno FROM employees;
则empno的position值为1,ssn的position的值为2,mgrno的position值为3;以此类推。
*valuep——需要定义的变量的在执行成功后的存储地址;如果提取出来的数据有多项,则该参数可以使用数组;
value_sz——valuep参数的指向的存储地址空间的长度;
dty——需要定义的变量的数据类型;SQLT_STR表示该变量是个字符串变量;SQLT_INT则表示该变量是个整型变量;
*indp——变量或数组指示器,默认为0;
*rlenp——变量或数组长度指示器,默认为0;
*rcodep——即将提取的变量的值指示器,默认为0;
mode——变量提取模式。其取值为OCI_DEFAULT或OCI_DYNAMIC_FETCH;OCI_DYNAMIC_FETCH用于在提取资料过程中,需要动态资料的时候,此时必须用CIDefineDynamic函数建立一个回调函数用以提取数据;这种情况下,valuep和value_sz参数可以忽略;
该函数使用举例如下:OCIDefineByPos(stmthp, &dfnhp[4],
errhp, (ub4) 5,
(dvoid *) &No[0],
(sb4) sizeof(No[0]),
(ub2) SQLT_INT,
(dvoid *) 0,
(ub2 *) 0,
(ub2 *) 0,
(ub4) OCI_DEFAULT)
补充说明:如果输出变量是多行资料,其大小为输出变量的行数与该变量自身大小的乘积。此时,在函数后面还需要使用另一个函数OCIDefineArrayOfStruct来定义该数组。函数OCIDefineArrayOfStruct说明如下:
函数原形:sword OCIDefineArrayOfStruct(OCIDefine *defnp,
OCIError *errhp,
ub4 pvskip,
ub4 indskip,
ub4 rlskip,
ub4 rcskip )
参数说明:
*defnp——从函数OCIDefineByPos返回的对应该变量的定义句柄,对应于OCIDefineByPos函数的第二项参数defnpp;
indskip——默认为0;
rlskip——默认为0;
rcskip——默认为0;
该函数使用举例说明如下(对应于函数OCIDefineByPos的例子):
OCIDefineArrayOfStruct(dfnhp[4],
errhp,
sizeof(No[0]),
0,0,0) OCI在执行陈述语句时,有时需要向该语句传递输入值,OCI8通过函数OCIBindByPos或OCIBindByName来实现该功能,OCIBindByPos将需要输入的变量与与其对应的参数值的位置绑定起来,从而实现向陈述语句中传递值的效果,而OCIBindByName则是通过绑定相应的变量名称来实现输入值的传递。
函数原型:sword OCIBindByPos ( OCIStmt *stmtp,
OCIBind **bindpp,
OCIError *errhp,
ub4 position,
dvoid *valuep,
sb4 value_sz,
ub2 dty,
dvoid *indp,
ub2 *alenp,
ub2 *rcodep,
ub4 maxarr_len,
ub4 *curelep,
ub4 mode )
参数说明:
position——需要绑定的该变量在陈述语句的列表中的位置,从1开始,依次递增;
*valuep——需要绑定的传入值的存储地址;
value_sz——valuep参数的指向的存储地址空间的长度;
dty——需要绑定的变量的数据类型;SQLT_STR表示该变量是个字符串变量;SQLT_INT则表示该变量是个整型变量;
*indp——变量或数组指示器,默认为0;
*alenp——变量或数组长度指示器,默认为0;
*rcodep——即将提取的变量的值指示器,默认为0;
maxarr_len——dyt参数的最大可能取值的数目,在非PL/SQL语句中该差数无效果;默认值为0;
*curelep——对应与maxarr_len,表示dyt参数取值的实际数目;默认值为0;
mode——变量提取模式。其取值为OCI_DEFAULT或OCI_DATA_AT_EXEC;当使用OCI_DATA_AT_EXEC时,value_sz表示在该陈述语句执行过程中可以使用的传入的该项值的最大存储长度,此时需要动态绑定该传入值;一般来说,mode的取值都为OCI_DEFAULT;
该函数使用举例如下:OCIBindByPos(stmthp, &bndhp[3],
errhp, (ub4) 4,
(dvoid *) register_number,
(sb4) nLen, SQLT_STR,
(dvoid *) 0, (ub2 *)0,
(ub2 *)0,
(ub4) 0, (ub4 *) 0,
(ub4) OCI_DEFAULT)
函数原型:sword OCIBindByName ( OCIStmt *stmtp,
OCIBind **bindpp,
OCIError *errhp,
CONST text *placeholder,
sb4 placeh_len,
dvoid *valuep,
sb4 value_sz,
ub2 dty,
dvoid *indp,
ub2 *alenp,
ub2 *rcodep,
ub4 maxarr_len,
ub4 *curelep,
ub4 mode )
参数说明:
*stmtp——用以进行查询的陈述语句句柄;该句柄必须是已经分配成功的句柄;
**bindpp——用户定义的传入值集合的指针;该参数指针从下标0开始,依次递增一个数组单元;
*placeholder——需要绑定的该变量在陈述语句中的占位符;
placeh_len——palceholder参数的长度;
*valuep——指向需要绑定的该变量的传入值的地址;
value_sz——valuep参数存储的变量值的位组长度;
dty——需要绑定的变量的数据类型;SQLT_STR表示该变量是个字符串变量;SQLT_INT则表示该变量是个整型变量;
*indp——变量或数组指示器,默认为0;
*alenp——变量或数组长度指示器,默认为0;
*rcodep——即将提取的变量的值指示器,默认为0;
maxarr_len——dyt参数的最大可能取值的数目,在非PL/SQL语句中该差数无效果;默认值为0;
*curelep——对应与maxarr_len,表示dyt参数取值的实际数目;默认值为0;
mode——变量提取模式。其取值为OCI_DEFAULT或OCI_DATA_AT_EXEC;当使用OCI_DATA_AT_EXEC时,value_sz表示在该陈述语句执行过程中可以使用的传入的该项值的最大存储长度,此时需要动态绑定该传入值;一般来说,mode的取值都为OCI_DEFAULT;
该函数使用举例如下:OCIBindByName(stmthp, &bndhp[1], errhp,
(text *) :field1,
(sb4) strlen((char *) :phone_number),
(dvoid *) & to_field1,
(sb4) sizeof(phone_number),
SQLT_STR,
(dvoid *) 0, (ub2 *)0,
(ub2 *)0,(ub4) 0, (ub4 *) 0,
(ub4) OCI_DEFAULT)
补充说明:如果输入变量是多行资料,则valuep参数应该为一个用户定义了大小的静态数组的初始地址,其大小为输入变量的行数与该变量自身大小的乘积。此时,在函数后面还需要使用另一个函数OCIBindArrayOfStruct来定义该数组。函数OCIBindArrayOfStruct说明如下:
函数原型:sword OCIBindArrayOfStruct ( OCIBind *bindp,
OCIError *errhp,
ub4 pvskip,
ub4 indskip,
ub4 alskip,
ub4 rcskip )
参数说明:
*bindp——从函数OCIBindByPos或OCIBindByName返回的对应该变量的绑定句柄,对应于函数OCIBindByPos或OCIBindByName的第二项参数bindpp;
pvskip——从本条记录中该变量的存储地址的到下条记录中该变量的存储地址之间的大小;也就是定义的一条记录的存储空间的大小;
indskip——默认为0;
rlskip——默认为0;
rcskip——默认为0;
该函数使用举例如下:OCIBindArrayOfStruct(bndhp[N],
errhp,
sizeof(record_array[0]),
indsk[N],
rlsk[N],
rcsk[N]) 在执行语句分析完成,并且变量定义或绑定完成后,便可以执行该陈述句柄,从而实现陈述语句中的SQL语句能完成的功能。使用函数OCIStmtExecute来执行该陈述句柄。执行成功,返回0;
函数原型:sword OCIStmtExecute ( OCISvcCtx *svchp,
OCIStmt *stmtp,
OCIError *errhp,
ub4 iters,
ub4 rowoff,
CONST OCISnapshot *snap_in,
OCISnapshot *snap_out,
ub4 mode)
参数说明:
*svchp——已分配并设置成功的服务句柄;
*stmtp——指向需要执行的陈述语句的句柄;
iters——对于非选择语句来说,该函数执行次数等于iters减去rowoff的值;对于选择语句来说,如果iters不为0,则该函数在执行前必须有定义句柄(即需要定义位址空间来存储select出来的变量值),而函数会预先提取出多于iters条记录(如果可提取记录条数大于iters的话),将其中iters条正式提取出来;如果事先并不知道有多少条记录会被提取,则将iters的值置为0;在非选择语句中,若iters的值为0,则函数返回错误;
rowoff——函数执行时,输入变量在绑定的变量数组的开始位置。用于多行记录的修改或插入、删除;比如,定义的绑定变量为array[100],执行该函数时,iters的值为50,rowoff的值为10,则表示从array[10]开始提取传入值,而执行的次数则是50-10 = 40(次);
*snap_in——可选参数。默认值为0;
*snap_out——可选参数。默认值为0;
mode——执行模式;有四种执行模式:
OCI_DEFAULT——缺省模式,在该模式下,总是隐式返回选择选择语句的有关描述信息;
OCI_DESCRIBE_ONLY——在该模式下,陈述句柄并不被执行,但是它会返回可提取记录的条数;
OCI_COMMIT_ON_SUCCESS——在该模式下,如若函数执行成功,则当前的处理马上会自动提交;
OCI_EXACT_FETCH——该模式用于当前程序很明确的清楚有多少条记录会被提取出来;并且,使用该模式前必须要有定义句柄;
该函数的使用举例如下:OCIStmtExecute(svchp, stmthp, errhp,
(ub4) nCount, (ub4) 0,
(CONST OCISnapshot*) 0,
(OCISnapshot*) 0,
(ub4) OCI_DEFAULT)
另外,还可以使用函数OCIStmtFetch来提取固定数目的记录,其函数使用说明如下:
函数原型:sword OCIStmtFetch ( OCIStmt *stmtp,
OCIError *errhp,
ub4 nrows,
ub2 orientation,
ub4 mode )
参数说明:
*stmtp——需要执行的陈述句柄;
nrows——需要提取的记录的条数;
orientation——该参数只有唯一一个缺省值:OCI_FETCH_NEXT;
mode——默认为OCI_DEFAULT;
该函数使用举例如下:sword OCIStmtFetch (stmtp,
errhp,
rows_number,
OCI_FETCH_NEXT,
OCI_DEFAULT)
该函数成功执行,而无数据时,返回OCI_NO_DATA; 在执行陈述句柄后,有的语句如insert、delete等需要提交当前事务,从而真正实现insert、delete等功能。OCI8使用函数OCITransCommit来实现这一功能。
函数原型:sword OCITransCommit ( OCISvcCtx *svchp,
OCIError *errhp,
ub4 flags )
参数说明:
*svchp——已分配并设置成功的服务句柄;
flags——提交标志。默认为0;
该函数使用举例如下:OCITransCommit(svchp, errhp, (ub4) 0) 在执行完陈述语句后,若需要取消当前执行的操作,则需要回滚当前事务。OCI8使用函数OCITransRollback来完成该功能。
函数原型:sword OCITransRollback(dvoid *svchp,
OCIError *errhp,
ub4 flags )
参数说明:
*svchp——需要回滚当前事务的服务句柄;
flags——回滚标志。只有一个唯一的取值得:OCI_DEFAULT;
该函数使用举例如下:OCITransRollback(svchp,
errhp,
OCI_DEFAULT) 断开与数据库的连接需要进行下面一系列工作:结束当前会话、断开与数据库连接服务、释放分配的各个句柄。下面分别说明各项工作所使用的oci函数。
结束当前会话:如果要断开与数据库的连接,则需要先结束当前会话,使用函数OCISessionEnd来完成该功能。执行成功,返回0
函数原型:sword OCISessionEnd(OCISvcCtx *svchp,
OCIError *errhp,
OCISession *authp,
ub4 mode)
参数说明:
*svchp——需要断开的服务句柄;
*authp——会话句柄;
mode——会话结束模式。只有一种模式:OCI_DEFAULT;
该函数使用举例如下:OCISessionEnd(svchp,
errhp,
authp,
(ub4) 0)
断开与数据库的连接服务:当前会话结束后,需要断开与服务器的连接,结束用户对数据库的操作。OCI8使用函数OCIServerDetach来完成该任务。执行成功,返回0;
函数原型:sword OCIServerDetach(OCIServer *srvhp,
OCIError *errhp,
ub4 mode )
参数说明:
*svchp——需要断开的服务器句柄;
mode——执行模式,只有一种模式:OCI_DEFAULT;
该函数使用举例如下:OCIServerDetach(srvhp,
errhp,
(ub4) OCI_DEFAULT)
释放分配的各个句柄:在结束当前会话、断开与数据库的连接后,由于我们手动分配了很多句柄,系统不会自动释放,因而需要手工释放这些句柄,清扫使用环境。OCI8里,使用函数OCIHandleFree来释放各个句柄。
函数原型:sword OCIHandleFree(dvoid *hndlp,ub4 type)
参数说明:
*hndlp——需要释放的句柄;
type——该句柄的类型。参见OCIHandleAlloc函数说明的type参数;
注:使用OCIHandleAlloc函数分配了哪些句柄,那么就需要用该函数释一一放这些句柄;
创建 dblink
create public database link TO_ORCL
connect to to_orcl identified by to_orcl
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521)))(CONNECT_DATA =(sid = orcl)))';



  • OCI甯哥敤鍑芥暟鐨勫嚱鏁拌鏄
    绛旓細OCI_NO_MUTEX鈥斺旈潪浜掓枼妯″紡;鍦ㄨ妯″紡涓,OCI搴撳悇鐜鍙ユ焺骞朵笉浜掓枼,鎵鏈夌殑鎺夌敤閮戒娇鐢ㄥ悓涓涓幆澧冨彞鏌,骞朵笖鍙兘鏈変竴涓幆澧冨彞鏌勮捣浣滅敤銆侽CI_ENV_NO_UCB鈥斺旂姝㈠洖婊氭ā寮;璇ユā寮忕敤浠ョ姝㈠湪鐜鍙ユ焺鍒濆鍖栬繃绋嬩腑鐨勫姩鎬丆ALL_BACK鍑芥暟鎺夌敤;Xtramemsz鈥斺旀寚瀹氬湪璇ョ幆澧冨彞鏌勭敓瀛樻湡鍐呭垎閰嶅唴瀛樼殑鏁伴噺;**usrmempp鈥斺旀寚鍚慩tra...
  • OCI甯哥敤鍑芥暟鐨澶ц嚧姝ラ
    绛旓細涓銆 瀹氫箟骞跺垵濮嬪寲鎵闇鍚勫彉閲廵nvhp銆乻rvhp銆乪rrhp銆乻vchp銆乤uthp銆乭ndlp銆乻tmthp銆佺瓑绛変簩銆佽繛鎺ユ暟鎹簱1銆 OCIInitialize銆傚垵濮嬪寲OCI绋嬪簭鐜2銆丱CIEnvInit銆 鍒濆鍖朞CI鐜鍙ユ焺3銆 OCIHandleAlloc銆傚垎閰嶅悇鍙ユ焺锛岄渶瑕佸垎閰嶇殑鍙ユ焺绫诲瀷濡備笅锛歄CI_HTYPE_SVCCTX,OCI_HTYPE_ERROR,OCI_HTYPE_SESSION,OCI_HTY...
  • 鐢≒HP鎿嶇旱Oracle鐨凩OB绫诲瀷鐨勬暟鎹
    绛旓細涓嬮潰灏遍氳繃鍑犱釜渚嬪瓙鏉璇存槑濡備綍鐢≒HP鐨OCI鍑芥暟鏉ユ彃鍏 鍙栧嚭鍜屾煡璇OB鏁版嵁 涓 鎻掑叆 涓嶈兘鐩存帴鐢↖NSERT璇彞鍚慙OB瀛楁涓彃鍏ュ 涓鑸儏鍐典笅 鏈夊涓嬬殑鍑犳 锛庡厛鍒嗘瀽涓涓狪NSERT璇彞 杩斿洖涓涓狶OB鐨勬弿杩扮 锛庣敤OCI鍑芥暟鐢熸垚涓涓湰鍦扮殑LOB瀵硅薄 锛庡皢LOB瀵硅薄缁戝畾鍒癓OB鎻忚堪绗︿笂 锛庢墽琛孖NSERT璇彞 锛庣粰LOB瀵硅薄...
  • php杩炴帴oracle鏁版嵁搴oci_connect鍑芥暟闂
    绛旓細resource oci_connect ( string $username , string $password [, string $db [, string$charset [, int $session_mode ]]] )鍏朵腑绗笁涓弬鏁 $db 鍦∣racle涓彨锛氭湰鍦癗et鏈嶅姟鍚嶏紝鏄瓨鍌ㄥ湪 tnsnames.ora涓殑锛屽吀鍨嬬殑濡備笅锛歋ALES = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP...
  • OCI浣跨敤鐨勪緥瀛,瑕佹眰瀹屾暣浠g爜,閲嶇偣鏄疧CIBindbypos鐨勪娇鐢,ocibindbyname...
    绛旓細;sem_wait(&sem_or);// 鎸傝捣淇″彿 oci_excu(oracle_env,(text *)sql,0);// 鎻掑叆鏁版嵁 sem_post(&sem_or);// 淇″彿瑙i攣 memset(tName,0x00,10);} 寰幆鎻掑叆鏁版嵁鍗冲彲 浣犳墍鎸囨壒閲忚帿闈炲氨鏄繖涓剰鎬濓紵 鍙﹀OCIDefineByPos 杩欎釜鍑芥暟鐨浠嬬粛闅忎究鐧惧害涓嬪ソ鍍忛兘瑙i噴鐨勫緢娓呮浜 浣犱笉鏄庣櫧鐨勫湴鏂规槸鍝噷锛燂紵
  • 浣跨敤OCI鎺ュ彛璋冪敤瀛樺偍杩囩▼
    绛旓細c static CallableStatement callprol2(String sql,String inparameters[],Integer outparameters[]){conn=getConn();try {cs=conn.prepareCall(sql);if(inparameters!=null){for(int i=0;i<inparameters.length;i++){cs.setObject(i+1,inparameters[i]);}}///缁檕ut鍙傛暟璧嬪糹f(outparameters!=n...
  • 璇锋暀oracle oci 鐨 OCI
    绛旓細OCI鍏佽寮鍙戣呭湪绋嬪簭閲屼娇鐢⊿QL鍜孭L/SQL鏉ヨ闂暟鎹簱銆傚紑鍙戣呭彲浠ヤ娇鐢ㄧ涓変唬璇█鏉ョ紪鍐欑▼搴忥紝鑰屼娇鐢∣CI鏉ヨ闂暟鎹簱銆侽CI鏄敱涓缁勫簲鐢ㄧ▼搴忓紑鍙戞帴鍙o紙API锛夌粍鎴愮殑锛孫RACLE鎻愪緵API鐨勬柟寮忔槸鎻愪緵涓缁勫簱銆傝繖缁勫簱鍖呭惈涓绯诲垪鐨勫嚱鏁璋冪敤銆傝繖缁勫嚱鏁板寘鍚簡杩炴帴鏁版嵁搴撱佽皟鐢⊿QL鍜屼簨鍔℃帶鍒剁瓑銆傚湪瀹夎DBMS SERVER鎴栬呭鎴...
  • php鍙婃暟鎹簱
    绛旓細OCI鍑芥暟鏇存柊鎹鏇村ソ涓浜涖備袱鑰呯殑浣跨敤璇硶鍑犱箮鐩稿樊鏃犲嚑銆傚鍓嶆墍杩,浣犵殑PHP瀹夎閫夐」搴旇鍙互鏀寔涓よ呯殑浣跨敤銆 鎯宠幏寰楁洿澶氭湁鍏冲湪Microsoft Windows骞冲彴涓婂畨瑁呮敮鎸丳HP3鐨凙pache鏈嶅姟鍣ㄧ殑鐭ヨ瘑浠ュ強鏇村鏈夊叧Oracle鏁版嵁搴撶殑鐭ヨ瘑,璇锋煡闃呬互涓婾RL:銆 4.1 杩炴帴 if ($conn=Ora_Logon("user@TNSNAME","password")) { echo "...
  • php璋冪敤oracle瀛樺偍杩囩▼涓鍑芥暟
    绛旓細conn = oci_connect('SCOTT','TIGER') or die;sql = 'BEGIN sayHello(:name, :message); END;';stmt = oci_parse($conn,$sql);// Bind the input parameter oci_bind_by_name($stmt,':name',$name,32);// Bind the output parameter oci_bind_by_name($stmt,':message',$message,...
  • c璇█涓闂暟鎹簱閮界敤鍒颁簡鍝簺绫?
    绛旓細1. **ODBC API锛** ODBC API鏄暟鎹簱璁块棶鐨勬牳蹇冿紝瀹冩彁渚涗簡涓绯诲垪鍑芥暟鐢ㄤ簬杩炴帴鏁版嵁搴撱佹墽琛孲QL鏌ヨ銆佽幏鍙栨煡璇㈢粨鏋滅瓑鎿嶄綔銆2. **鏁版嵁搴撹繛鎺ョ被锛** 鏁版嵁搴撹繛鎺ョ被鐢ㄤ簬寤虹珛鍜岀鐞嗕笌鏁版嵁搴撶殑杩炴帴銆傚湪ODBC涓紝鍙互浣跨敤`SQLHDBC`鏁版嵁绫诲瀷琛ㄧず鏁版嵁搴撹繛鎺ュ彞鏌勩3. **SQL璇彞鎵ц绫伙細** 杩欎簺绫荤敤浜庢墽琛孲QL...
  • 扩展阅读:函数公式一览表 ... 表格如何生成自动计算 ... 50个常用快捷键大全 ... 办公常用的20个函数 ... 十个常用函数公式 ... 两个表格一一对应匹配 ... 函数图像大全 ... excel必背50个常用函数 ... 表格公式大全 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网