ID:               31995
 Updated by:       [EMAIL PROTECTED]
 Reported By:      wojciech dot superson at bph dot pl
 Status:           Bogus
 Bug Type:         OCI8 related
 Operating System: win32 only
 PHP Version:      5CVS-2005-03-4
 New Comment:

Out of interest, are you running ISAPI, CGI or apache on windows?


Previous Comments:
------------------------------------------------------------------------

[2005-05-26 00:39:35] [EMAIL PROTECTED]

Works fine under linux -> bogus. (it's merely some stupid setup issue
under winblows)


------------------------------------------------------------------------

[2005-03-04 22:47:12] wojciech dot superson at bph dot pl

I applied the latest version but it does not work at all. In the
meantime I moved the whole application to Linux and IT WORKS FINE !!! I
have no errors or warnings. 
However I am not able to move to Linux another components of my
enviroment at this time. So please check if it is possible to correct
the php version on Windows platform.

------------------------------------------------------------------------

[2005-03-01 15:53:07] wojciech dot superson at bph dot pl

I made some tests yesterday and I am able to reproduce the problem on
wish. The problem accurs there are more than one call of the procedure
(any procedures which return a ref cursor) in the same time. I made as
follows

1. I have a page which is called every 1 second
2. The execution time of Oracle procedure is about 300-400 ms
3. If the is only one request everything is all right
4. If there is more than one call (for example 3, so they are called in
the same time) one of them return the following warning (and return only
one row)

PHP Warning: oci_fetch_all() [<a
href='function.oci-fetch-all'>function.oci-fetch-all</a>]:
OCIFetchStatement: ORA-01001: invalid cursor\n in d:\\program
files\\apache group\\Apache\\htdocs\\moa\\php\\oracle.php on line 188.

5. On the other hand there is nothing like this in Oracle alert log
file but there is many entries in apache error log file.

Awaiting your soon reply
Best regards,
Wojtek

------------------------------------------------------------------------

[2005-02-18 14:21:16] wojciech dot superson at bph dot pl

I just call this function passing the name of the storage procedure.
Here is the procedure:

PROCEDURE GetEventsByState
(
  P_UGP_ID IN NUMBER,
  P_HST_ID IN NUMBER,
  P_HST_GRP_ID IN NUMBER,
  P_DAYS IN NUMBER,
  P_STATE IN NUMBER,
  P_CURSOR OUT c_event,
  P_ERR_CODE OUT NUMBER,
  P_ERR_DESC OUT VARCHAR2
)
IS
BEGIN
   IF P_HST_ID = 0 AND P_HST_GRP_ID = 0 THEN
      OPEN P_CURSOR FOR
          SELECT EVT_ID, EVT_ETD_ID, EVT_HST_ID, HST_NAME, SYS_ID, SYS_NAME,
EVT_TYPE, EVT_SMS,
                     EVT_CLASS, EVT_BEEPS, EVT_LEVEL, 
to_char(EVT_DATE,'YYYY.MM.DD
HH24:MI:SS') EVT_DATE, EVT_STATE, EVT_MESSAGE
          FROM MOA_EVENTS, MOA_HOST, MOA_SYSTEM, MOA_EVENT_USERS
          WHERE EVT_HST_ID = HST_ID
            AND HST_SYS_ID = SYS_ID
            AND EVT_ETD_ID = EUS_ETD_ID
            AND EUS_UGP_ID = P_UGP_ID
                AND EVT_STATE = P_STATE
            AND EVT_DATE > sysdate - P_DAYS
                AND HST_VISIBLE = 1
                AND SYS_ACTIVE = 1
                AND SYS_VISIBLE = 1
                --Moze byc duzo zarejestrowanych zdarzen, dlatego nie mozna 
brac 100
ostatnich
                --AND EVT_ID >= (select max( EVT_ID ) from MOA_EVENTS) - 100
          ORDER BY EVT_ID DESC;

          RETURN ;
   END IF;

   IF P_HST_ID = 0 AND P_HST_GRP_ID > 0 THEN
      OPEN P_CURSOR FOR
          SELECT EVT_ID, EVT_ETD_ID, EVT_HST_ID, HST_NAME, SYS_ID, SYS_NAME,
EVT_TYPE, EVT_SMS,
                     EVT_CLASS, EVT_BEEPS, EVT_LEVEL, 
to_char(EVT_DATE,'YYYY.MM.DD
HH24:MI:SS') EVT_DATE, EVT_STATE, EVT_MESSAGE
          FROM MOA_EVENTS, MOA_HOST, MOA_SYSTEM, MOA_EVENT_USERS
          WHERE EVT_HST_ID = HST_ID
            AND HST_SYS_ID = SYS_ID
                AND EVT_ETD_ID = EUS_ETD_ID
            AND EUS_UGP_ID = P_UGP_ID
            AND EVT_STATE = P_STATE
            AND HST_GROUP = P_HST_GRP_ID
            AND EVT_DATE > sysdate - P_DAYS
                AND HST_VISIBLE = 1
                AND SYS_ACTIVE = 1
                AND SYS_VISIBLE = 1
            --AND EVT_ID >= (select max( EVT_ID ) from MOA_EVENTS) - 100
          ORDER BY EVT_ID DESC;

          RETURN ;
   END IF;

   IF P_HST_ID > 0 AND P_HST_GRP_ID = 0 THEN
      OPEN P_CURSOR FOR
          SELECT EVT_ID, EVT_ETD_ID, EVT_HST_ID, HST_NAME, SYS_ID, SYS_NAME,
EVT_TYPE, EVT_SMS,
                     EVT_CLASS, EVT_BEEPS, EVT_LEVEL, 
to_char(EVT_DATE,'YYYY.MM.DD
HH24:MI:SS') EVT_DATE, EVT_STATE, EVT_MESSAGE
          FROM MOA_EVENTS, MOA_HOST, MOA_SYSTEM, MOA_EVENT_USERS
          WHERE EVT_HST_ID = HST_ID
            AND HST_SYS_ID = SYS_ID
                AND EVT_ETD_ID = EUS_ETD_ID
            AND EUS_UGP_ID = P_UGP_ID
            AND EVT_STATE = P_STATE
            AND HST_ID = P_HST_ID
            AND EVT_DATE > sysdate - P_DAYS
                AND HST_VISIBLE = 1
                AND SYS_ACTIVE = 1
                AND SYS_VISIBLE = 1
                --AND EVT_ID >= (select max( EVT_ID ) from MOA_EVENTS) - 100
          ORDER BY EVT_ID DESC;

          RETURN ;
   END IF;

   IF P_HST_ID > 0 AND P_HST_GRP_ID > 0 THEN
      OPEN P_CURSOR FOR
          SELECT EVT_ID, EVT_ETD_ID, EVT_HST_ID, HST_NAME, SYS_ID, SYS_NAME,
EVT_TYPE, EVT_SMS,
                     EVT_CLASS, EVT_BEEPS, EVT_LEVEL, 
to_char(EVT_DATE,'YYYY.MM.DD
HH24:MI:SS') EVT_DATE, EVT_STATE, EVT_MESSAGE
          FROM MOA_EVENTS, MOA_HOST, MOA_SYSTEM, MOA_EVENT_USERS
          WHERE EVT_HST_ID = HST_ID
            AND HST_SYS_ID = SYS_ID
                AND EVT_ETD_ID = EUS_ETD_ID
            AND EUS_UGP_ID = P_UGP_ID
            AND EVT_STATE = P_STATE
            AND HST_GROUP = P_HST_GRP_ID
                AND EVT_HST_ID = P_HST_ID
            AND EVT_DATE > sysdate - P_DAYS
                AND HST_VISIBLE = 1
                AND SYS_ACTIVE = 1
                AND SYS_VISIBLE = 1
                --AND EVT_ID >= (select max( EVT_ID ) from MOA_EVENTS) - 100
          ORDER BY EVT_ID DESC;

          RETURN ;
   END IF;

   P_ERR_CODE := 0;
   P_ERR_DESC := 'OK';
EXCEPTION
   WHEN NO_DATA_FOUND THEN
      P_ERR_CODE := 10000;
      P_ERR_DESC := 'Nie znaleziono danych';

          MOA_LOG_PKG.SaveFatal( 'MOA_EVENT_PKG','GetEventsByState', SQLCODE,
P_ERR_CODE, P_ERR_DESC );
   WHEN OTHERS THEN
      P_ERR_CODE := 10001;
      P_ERR_DESC := 'Blad: ' || SQLCODE || ' ' || SQLERRM;

          MOA_LOG_PKG.SaveFatal( 'MOA_EVENT_PKG','GetEventsByState', SQLCODE,
P_ERR_CODE, SQLERRM );
END;

where c_cursor is:

TYPE c_event IS REF CURSOR RETURN r_event;

TYPE r_event IS RECORD
(
        EVT_ID                    MOA_EVENTS.EVT_ID%TYPE
       ,EVT_ETD_ID                MOA_EVENTS.EVT_ETD_ID%TYPE
           ,EVT_HST_ID            MOA_EVENTS.EVT_HST_ID%TYPE
           ,EVT_HST_NAME          MOA_HOST.HST_NAME%TYPE
           ,EVT_SYS_ID            MOA_SYSTEM.SYS_ID%TYPE
           ,EVT_HST_SYSTEM        MOA_SYSTEM.SYS_NAME%TYPE
           ,EVT_TYPE              MOA_EVENTS.EVT_TYPE%TYPE
           ,EVT_SMS                       MOA_EVENTS.EVT_SMS%TYPE
           ,EVT_CLASS             MOA_EVENTS.EVT_CLASS%TYPE
           ,EVT_BEEPS             MOA_EVENTS.EVT_BEEPS%TYPE
           ,EVT_LEVEL             MOA_EVENTS.EVT_LEVEL%TYPE
           ,EVT_DATE              MOA_EVENTS.EVT_DATE%TYPE
           ,EVT_STATE             MOA_EVENTS.EVT_STATE%TYPE
           ,EVT_MESSAGE           MOA_EVENTS.EVT_MESSAGE%TYPE
);

------------------------------------------------------------------------

[2005-02-18 13:56:36] [EMAIL PROTECTED]

How could we reproduce it?

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/31995

-- 
Edit this bug report at http://bugs.php.net/?id=31995&edit=1

Reply via email to