[Oracle] bledna inicjalizacja funkcji agregujacej
aPI - 13-11-2005 11:58
[Oracle] bledna inicjalizacja funkcji agregujacej
Po dlugim czasie udalo mi sie pokonac wczorajszy problem, a tu od razu narodzil sie nowy :/ Pisze funkcje agregujaca w C++. Kazda z trzech funkcji , ODCIAggregateInitialize, ODCIAggregateIterate, ODCIAggregateTerminate uruchamia sie oddzielnie (z zewnetrzej procedury) bezproblemowo. Niestety, kiedy chce uruchomic moja funkcje agregujaca, w pelni wykonuje sie tylko ODCIAggregateInitialize, a nigdy pozostale dwie. Podczas wywolywania funkcji agregujacej dostaje blad:
[1]: (Error): ORA-00600: kod błędu wewnętrznego, argumenty: [17099], [], [], [], [], [], [], [] ORA-28576: utracone połączenie RPC z agentem procedury zewnętrznej
Udalo mi sie dowiedziec, ze ORA-00600 [17099] to "The error manager state is inconsistent"
Niestety nie wiem czym jest error manager ani gdzie go szukac no i czy w ogole znajduje sie w zasiegu mojego kodu.
Zadaniem ODCIAggregateInitialize jest miedzy innymi utworzenie objetku, ktore pozostale dwie przyjmuja jako argument. Nie wiem czy objekt ten jest tworzony i czy wina lezy wlasnie po stronie blednej inicjalizacji argumentu czy moze raczej po stronie tego tajemniczego error managera. Wklejam definicje funkcji ODCIAggregateInitialize, ktora znajduje sie w Oracle Pozostale dwie funkcje sa rowniez czlonkami obiektu MINDISTANCEIMPL . Jako argument self pobieraja zainicjalizowany przez ODCIAggregateInitialize argument sctx.
Dolaczam rowniez kod w C++. I prosze o pomoc :)
TYPE MINDISTANCEIMPL as object (
counter int,
static function ODCIAggregateInitialize(sctx IN OUT MinDistanceImpl)
return number as language C
library distance name "ODCIAggregateInitialize"
with context
parameters (
context,
sctx,
sctx INDICATOR STRUCT,
RETURN INDICATOR
)
===============================================
int ODCIAggregateInitialize(
OCIExtProcContext *context,
MinDistanceImpl * sctx,
MinDistanceImpl_ind * sctx_ind)
{
Handles_t handles;
GetHandles(context, &handles);
if (checkerr(&handles, OCIMemoryAlloc((dvoid*) handles.usrhp, handles.errhp,
(dvoid**) &sctx,
OCI_DURATION_STATEMENT,
(ub4) sizeof(MinDistanceImpl),
OCI_MEMORY_CLEARED)))
return ODCI_ERROR;
sctx_ind->_atomic=OCI_IND_NOTNULL;
sctx_ind->COUNTER=OCI_IND_NOTNULL;
void * vct = new vector<Coordinates>();
((vector<Coordinates>*)vct)->clear();
sctx->COUNTER = (int)vct;
return ODCI_SUCCESS;
}
static int checkerr(Handles_t* handles, sword status)
{
text errbuf[512]; /* error message buffer */
sb4 errcode; /* OCI error code */
switch (status)
{
case OCI_SUCCESS:
case OCI_SUCCESS_WITH_INFO:
return 0;
case OCI_ERROR:
OCIErrorGet ((dvoid*) handles->errhp, (ub4) 1, (text *) NULL, &errcode,
errbuf, (ub4) sizeof(errbuf), (ub4) OCI_HTYPE_ERROR);
sprintf((char*)errbuf, "OCI ERROR code %d",errcode);
break;
default:
sprintf((char*)errbuf, "Warning - error status %d",status);
break;
}
OCIExtProcRaiseExcpWithMsg(handles->extProcCtx, 29400, errbuf,
strlen((char*)errbuf));
return -1;
}
static int GetHandles(OCIExtProcContext* extProcCtx, Handles_t* handles)
{
/* store the ext-proc context in the handles struct */
handles->extProcCtx=extProcCtx;
/* Get OCI handles */
if (checkerr(handles, OCIExtProcGetEnv(extProcCtx, &handles->envhp,
&handles->svchp, &handles->errhp)))
return -1;
/* get the user handle */
if (checkerr(handles, OCIAttrGet((dvoid*)handles->svchp,
(ub4)OCI_HTYPE_SVCCTX,
(dvoid*)&handles->usrhp,
(ub4*) 0, (ub4)OCI_ATTR_SESSION,
handles->errhp)))
return -1;
return 0;
}
Sławomir Szyszło - 13-11-2005 11:58
Dnia Sat, 12 Nov 2005 09:50:54 +0100, "aPI" <minics@op.LITERYpl> wklepał(-a):
>Po dlugim czasie udalo mi sie pokonac wczorajszy problem, a tu od razu >narodzil sie nowy :/ >Pisze funkcje agregujaca w C++. Kazda z trzech funkcji , >ODCIAggregateInitialize, ODCIAggregateIterate, ODCIAggregateTerminate >uruchamia sie oddzielnie (z zewnetrzej procedury) bezproblemowo. Niestety, >kiedy chce uruchomic moja funkcje agregujaca, w pelni wykonuje sie tylko >ODCIAggregateInitialize, a nigdy pozostale dwie. Podczas wywolywania funkcji >agregujacej dostaje blad: > >[1]: (Error): ORA-00600: kod błędu wewnętrznego, argumenty: [17099], [], [], >[], [], [], [], [] ORA-28576: utracone połączenie RPC z agentem procedury >zewnętrznej > >Udalo mi sie dowiedziec, ze ORA-00600 [17099] to >"The error manager state is inconsistent"
Błąd ORA-00600 to błąd krytyczny oznaczający zwykle, że trafiłeś na jakiegoś buga. A wtedy to tylko Metalink cię ratuje... czasami. Jaką masz wersję bazy? -- Sławomir Szyszło mailto:slaszysz@poczta.onet.pl Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/ Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
aPI - 13-11-2005 11:58
> Błąd ORA-00600 to błąd krytyczny oznaczający zwykle, że trafiłeś na > jakiegoś > buga. A wtedy to tylko Metalink cię ratuje... czasami. > Jaką masz wersję bazy?
ORACLE V9.2.0.1.0 - Production vsnsta=0 Windows 2000 Version 5.1 Service Pack 2, CPU type 586
jestem studentem w zwiazku z czym nie mam dostepu do metalinka :( Gdzies na experts-exchange znalazlem notatke (podobno wlasnie z metalinka) wg ktorej jest to nastepujacy blad:
DESCRIPTION: The error manager state is inconsistent
FUNCTIONALITY: Kernel Generic Error manager
IMPACT: PROCESS FAILURE
niestety, zadna z sugestii umieszczonych w tym artykule nie okazala sie pomocna :(
pozdrawiam Marcin
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
Oracle 19g +Insert +Insert +Insert...
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?=
=?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?=
[oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?=
[oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?=
MSSQL Express czy Oracle Express
=?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?=
=?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?=
zanotowane.pldoc.pisz.plpdf.pisz.plmelooonka.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|