C++ 使用c+中的otl执行oracle存储过程+;

C++ 使用c+中的otl执行oracle存储过程+;,c++,oracle,stored-procedures,otl,C++,Oracle,Stored Procedures,Otl,我有一个非常简单的存储过程,如下所示: CREATE OR REPLACE PROCEDURE rc_name (id IN NUMBER, name OUT VARCHAR) IS BEGIN SELECT receivable_class_name INTO name FROM receivableclass WHERE receivable_class_id = id; END; / 我使用以下命令在sqlplus中执行它: DECLARE B VARCHAR(100); B

我有一个非常简单的存储过程,如下所示:

CREATE OR REPLACE PROCEDURE rc_name (id IN NUMBER, name OUT VARCHAR)
IS
BEGIN
   SELECT receivable_class_name INTO name
   FROM receivableclass WHERE receivable_class_id = id;
END;
/
我使用以下命令在sqlplus中执行它:

DECLARE
B VARCHAR(100);
BEGIN
RC_NAME(99,B);
dbms_output.put_line('The rc class is ' ||B);
END;
/
这是完美的执行,并在控制台上打印值

现在使用otl,我想调用这个存储过程。下面是函数

void stored_proc(void)
{ 

int a=99;
char b[51];

try{

       static otl_stream* mpOtltestProc;

       static string testproc =  "BEGIN"
                                  "RC_NAME(:a<int>,:b<char[51]>)"
                                  "END;";
       if (mDbConnection == NULL)
       mDbConnection = dbCxnManager::getConnection();
       mpOtltestProc = new otl_stream(1, testproc.c_str(), *mDbConnection);


  *mpOtltestProc<<a;
  *mpOtltestProc>>b;
}
catch(otl_exception &p) 
{ 
ORACLE_ERROR; 
}

cout<<"B="<<b<<endl;

}
void存储过程(void)
{ 
INTA=99;
charb[51];
试一试{
静态otl_流*mpOtltestProc;
静态字符串testproc=“BEGIN”
RC_名称(:a,:b)
“结束;”;
如果(mDbConnection==NULL)
mDbConnection=dbCxnManager::getConnection();
mpOtltestProc=新的otl_流(1,testproc.c_str(),*mDbConnection);
*mpOtltestProcb;
}
捕获(otl_例外和p)
{ 
甲骨文错误;
}

coutsems参数的限定符缺失。
in
out
inout
参数的限定符缺失。应该类似于
RC\u名称(:a,:b)
。文档似乎是
in
out
inout
参数的限定符缺失。应该类似于
RC\u名称(:a,:b)
。文档为和