double get_estoque(requisicao_estoque *req) { double saldo; OCI_Statement *stmt = OCI_StatementCreate(oracledb); check_ociliberror(stmt); OCI_Prepare(stmt, "select sum(SALD_CTR) from table(saldo_inicial_tipoest(:emp, :est, :prod, :data, 'S', null, 0))"); OCI_BindShort(stmt, ":emp", &req->empresa); OCI_BindShort(stmt, ":est", &req->controle); OCI_BindString(stmt, ":prod", req->produto, 0); OCI_Date *d = OCI_DateCreate(NULL); OCI_DateSetDate(d, req->data_ano, req->data_mes, req->data_dia); OCI_BindDate(stmt, ":data", d); check_ociliberrorb(OCI_Execute(stmt)); OCI_Resultset *rs = OCI_GetResultset(stmt); check_ociliberror(rs); if (OCI_FetchNext(rs)) { saldo = OCI_GetDouble(rs, 1); } else { saldo = 0.0; } OCI_FreeStatement(stmt); return saldo; }
void Statement::bindParam(Param *parameter) { Param::ParamType paramType=parameter->getParamType(); DateTime *paramDT; switch(paramType){ case Param::Integer: OCI_BindInt(ociStmt, parameter->getParamName().toStdWString().c_str(), (int*)parameter->data); break; case Param::String: OCI_BindString(ociStmt, parameter->getParamName().toStdWString().c_str(), (dtext*)parameter->data, parameter->getMaxStringLength()); break; case Param::Double: OCI_BindDouble(ociStmt, parameter->getParamName().toStdWString().c_str(), (double*)parameter->data); break; case Param::Datetime: paramDT=parameter->getDateTimeValue(); paramDT->setConnection(this->connection); paramDT->copyToOci(); OCI_BindDate(ociStmt, parameter->getParamName().toStdWString().c_str(), paramDT->ociDate()); break; case Param::Stmt: { Statement *paramStmt=parameter->getStmtValue(); paramStmt->setConnection(this->connection); /*if(useScrollableResultsets){ int res=OCI_SetFetchMode(paramStmt->ociStatement(), OCI_SFM_SCROLLABLE); qDebug() << "OCI_SetFetchMode for param returned" << res; }*/ OCI_BindStatement(ociStmt, parameter->getParamName().toStdWString().c_str(), paramStmt->ociStatement()); } break; case Param::ReturningInto: OCI_RegisterString(ociStmt, parameter->getParamName().toStdWString().c_str(), 250); break; case Param::StringList: this->bindArrayOfStrings(parameter->getParamName(), (dtext*)parameter->data, parameter->getMaxStringLength(), parameter->getArraySize()); break; default: Q_ASSERT(false); break; } DbUtil::checkForOciError(this); setParamDirection(parameter); if(parameter->isNull()){ OCI_BindSetNull(OCI_GetBind2(ociStmt, parameter->getParamName().toStdWString().c_str())); } DbUtil::checkForOciError(this); }