Пример #1
0
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;
}
Пример #2
0
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);
}