我正在开发一个填充 Oracle (11g) 数据库的 C++ 应用程序。该数据库有一个带有以下签名的包:
FUNCTION SAVE_CONF
(I_USER IN VARCHAR2
,I_APP IN VARCHAR2
,I_CONTEXT IN VARCHAR2
,O_CFG OUT SYS_REFCURSOR --CLOB
,O_ERROR_MSG OUT VARCHAR2
)
RETURN NUMBER;
但是,我无法在我的应用程序中访问 O_CFG refcursor。这就是我定义我的 SQL 语句的方式。
OraStmt->setSQL("BEGIN :1 := SCHM.PCK.SAVE_CONF(:2,:3,:4,:5,:6); END;");
OraStmt->registerOutParam(1, OCCIINT);
OraStmt->setString(2, User.GetBuffer(0));
OraStmt->setString(3, App.GetBuffer(0));
OraStmt->setString(4, Context.GetBuffer(0));
OraStmt->registerOutParam(5,OCCICLOB);
OraStmt->registerOutParam(6,OCCISTRING,32767);
OraStmt->setAutoCommit(FALSE);
OraStmt->executeQuery();
但是,我无法定义第 5 个参数数据类型。我已经尝试过使用 OCCICURSOR、OCCIREF 和许多其他数据类型。
执行该指令时executeQuery()
,会抛出 oracle::occi::SQLException 和 ORA-6550。此 ORA 表明参数类型不匹配。
我以前曾在 CLOB 中进行过写作,但从未通过 REFCURSOR。