大家好,我刚开始学习oracle ,对于linux 下使用oci调用oracle中的存储过程没有头绪,以前使用SQL SERVER 和VS时需要记录集的绑定,但目前网上oci调用存储过程的例子不多,请大家给下思路,最好带有例子,存储过程里有输入输出参数
解决方案 »
- 关于oracle大量删除重复数据的问题
- oracle 报psl-00103 错 请大神帮帮忙 跪求
- 请教一个分组排序的sql写法
- 大哥,帮忙呀!
- 关于index range scan的问题
- 小弟刚刚学oracle,哪位高手给讲一下各个用户名的用途
- oracle8i中Oracle EnterPrise Manager中备份数据库时提示设置首选身份证明??
- oracle8.16的 imp 与 exp 问题?
- 报错:ORA-01102 ,事实与oracle错误解释不符
- oracle apex 新编了个报表系统,能实现分层次填报和汇总。感觉apex挺好的。感兴趣的可以交流一下。
- 如何按树型结构展现数据
- oracle 问题
test_p( vs_trans_buffer IN OUT VARCHAR2,
vn_buffer_len IN OUT NUMBER,
vn_ret_code OUT NUMBER);
调用:
int fun_do_pro()
{
char trans_buffer[1024];
int buffer_len;
char procudre_sql[1024];
strcpy((char *)procudre_sql,
"begin test_p(:trans_buffer,:buffer_len,:ret_code); end;");
if (OCIStmtPrepare(stmthp, errhp, (text *)procudre_sql, (ub4)strlen(procudre_sql), (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT))
{//OCIStmtPrepare() Error;}
for( i = 0; i < 5; i++ )
bndhp[i] = (OCIBind *) 0;
if ( OCIBindByName(stmthp, &bndhp[0], errhp, (text *)":trans_buffer", (sb4) strlen((char *) ":trans_buffer"), (dvoid *) trans_buffer, (sb4) sizeof(trans_buffer), SQLT_STR, (dvoid *) 0, (ub2 *)0, (ub2 *)0,(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT) ||
OCIBindByName(stmthp, &bndhp[1], errhp, (text *)":buffer_len", (sb4) strlen((char *) ":buffer_len"), (dvoid *) &buffer_len, (sb4) sizeof(buffer_len), SQLT_INT, (dvoid *) 0, (ub2 *)0, (ub2 *)0,(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT) ||
OCIBindByName(stmthp, &bndhp[2], errhp, (text *)":ret_code", (sb4) strlen((char *) ":ret_code"), (dvoid *) &succ_flag, (sb4) sizeof(succ_flag), SQLT_INT, (dvoid *) 0, (ub2 *)0, (ub2 *)0,(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT))
{ //OCIBindByName() Error!
return -1;
}
if (OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1, (ub4) 0, (CONST OCISnapshot*) 0, (OCISnapshot*) 0, (ub4) OCI_DEFAULT))
{ //OCIStmtExecute() Error!
return -1;
}printf("trans_buffer is [%s]\n", trans_buffer);return 0;
}
不过,主要分这几步:
1.OCIStmtPrepare
2.OCIBindByName
3.OCIStmtExecute