Re: Autocomit and oracle packages

2001-09-27 Thread Tim Bunce

On Wed, Sep 26, 2001 at 03:12:53PM +1200, Dan Horne wrote:
 Hi all
 
 I don't know if this has been discussed on this list before, but I just
 thought I'd mention it as it took me a while to figure out why my code
 wasn't working. If you call an Oracle supplied package that requires a
 commit after being called (such as dbms_alert), Autocommit will not take
 care of it for you - I guess because it's not a DML statement. To save you
 having to type commit after all of your other SQL, create a separate
 connection for the procedure calls, and commit on that handle

Odd.

Is that behaviour documented by Oracle?
Are you using OCI 7 or OCI 8?
Can you provide a small self-contained test case?

Tim.



RE: Autocomit and oracle packages

2001-09-27 Thread Dan Horne

Test case

1. Launch two instances of SQL*PLus. In the first enter

set serverout on size 100

DECLARE
   c_alert_nameCONSTANT CHAR(10) := 'test alert';
   v_message   VARCHAR2(2000);
   v_statusNUMBER;
   c_wait  CONSTANT NUMBER := 60;
   v_exit  PLS_INTEGER := 0;
BEGIN

   -- resgister interest in the alert

   dbms_alert.register(c_alert_name);

   -- Loop constantly until the alert is received

   WHILE (v_exit = 0) LOOP

 dbms_alert.waitone(c_alert_name, v_message, v_status, c_wait);

 IF (v_status = 0) THEN
   dbms_output.put_line('Alert Raised!!!');
   dbms_output.put_line('Message: '||substr(v_message,1,200));
   v_exit := 1;
 ELSE
   dbms_output.put_line('No alert raised...');
 END IF;

   END LOOP;

END;
/

2. In the second enter:

exec dbms_alert.signal('test alert','hello world');

nothing happens

Then enter

commit;

And the alert is recived in the first session.

According to The Oracle 8i Supplied Packages Reference:

Alerts are transaction-based. This means that the waiting session does not
get alerted until the transaction signalling the alert commits. (p 2-1).

dbms_job is transaction based too. I don't know if there are others.

Dan

-Original Message-
From: Tim Bunce [mailto:[EMAIL PROTECTED]]
Sent: Thursday, September 27, 2001 9:31 PM
To: Dan Horne
Cc: [EMAIL PROTECTED]
Subject: Re: Autocomit and oracle packages


On Wed, Sep 26, 2001 at 03:12:53PM +1200, Dan Horne wrote:
 Hi all

 I don't know if this has been discussed on this list before, but I just
 thought I'd mention it as it took me a while to figure out why my code
 wasn't working. If you call an Oracle supplied package that requires a
 commit after being called (such as dbms_alert), Autocommit will not take
 care of it for you - I guess because it's not a DML statement. To save you
 having to type commit after all of your other SQL, create a separate
 connection for the procedure calls, and commit on that handle

Odd.

Is that behaviour documented by Oracle?
Are you using OCI 7 or OCI 8?
Can you provide a small self-contained test case?

Tim.