Beispiel #1
0
int ociw_query_result(db_wrap * self, char const * sql, size_t len, db_wrap_result ** tgt)
{
	CONN_DECL(DB_WRAP_E_BAD_ARG);
	if (! sql || !*sql || !len || !tgt) return DB_WRAP_E_BAD_ARG;

	OCI_Statement * st = OCI_StatementCreate(ociconn);
	if (! st)
	{
		lerr("Creation of OCI_Statement failed.\n");
		return DB_WRAP_E_CHECK_DB_ERROR;
	}
	db_wrap_result * wres = (db_wrap_result*)malloc(sizeof(db_wrap_result));
	if (! wres) return DB_WRAP_E_ALLOC_ERROR;
	*wres = ociw_res_empty;
	ociw_result_impl * impl = (ociw_result_impl*)malloc(sizeof(ociw_result_impl));
	if (! impl)
	{
		OCI_StatementFree(st);
		free(wres);
		return DB_WRAP_E_ALLOC_ERROR;
	}
	*impl = ociw_result_impl_empty;
	impl->st = st;
	wres->impl.data = impl;
#if 1
	if (! OCI_ExecuteStmt(st, sql))
	{
		wres->api->finalize(wres);
		/*
		  i don't quite know why, but fetching the OCI error state after this
		  returns a 0 error code and empty error string.
		 */
		return DB_WRAP_E_CHECK_DB_ERROR;
	}
#else
	if (!
		//OCI_ExecuteStmt(st, sql)
		OCI_Prepare(st, sql)
	   )
	{
		lerr("Preparation of OCI_Statement failed: [%s]\n",OCI_GetSql(st));
		wres->api->finalize(wres);
		return DB_WRAP_E_CHECK_DB_ERROR;
	}
	if (! OCI_Execute(st))
	{
		lerr("Execution of prepared OCI_Statement failed: [%s]\n",OCI_GetSql(st));
		wres->api->finalize(wres);
		return DB_WRAP_E_CHECK_DB_ERROR;
	}
#endif
	impl->result = OCI_GetResultset(st)
		/* MIGHT be null - the docs are not really clear here what happens on an empty result set. */
		;
	*tgt = wres;
	return 0;
}
Beispiel #2
0
static void oci_err_handler(OCI_Error *err)
{
	ociw_error_info_kludge.sql =
		OCI_GetSql(OCI_ErrorGetStatement(err));
	ociw_error_info_kludge.errorString =
		OCI_ErrorGetString(err);
	ociw_error_info_kludge.ociCode =
		OCI_ErrorGetOCICode(err);
}
Beispiel #3
0
void err_handler(OCI_Error *err)
{
    printf(
                "code  : ORA-%05i\n"
                "msg   : %s\n"
                "sql   : %s\n",
                OCI_ErrorGetOCICode(err), 
                OCI_ErrorGetString(err),
                OCI_GetSql(OCI_ErrorGetStatement(err))
           );
}