home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.databases.oracle      Overblown overpriced overengineered SHIT      2,288 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 1,077 of 2,288   
   Mike Stenzler to Mike Stenzler   
   Re: trigger puzzlement   
   12 Feb 04 15:04:14   
   
   XPost: comp.database.oracle, comp.databases.oracle.server   
   From: mstenzler@ssaris.com   
      
   Sorry- left out the complete error info:   
      
   when I attempt to execute from SQL+ I get the following 3 errors:   
      
      
   ORA-01403: no data found   
   ORA-06512: at "TEST.AUROW_GRID_CLONE", line 8   
   ORA-04088: error during execution of trigger 'TEST'.AUROW_GRID_CLONE'   
      
   this highlights that the select for pre-existance of "today's" t2.record is   
   causing a problem when there is no record. I was under the impression that   
   using the EXISTS statement was a way to query a table w/o getting a   
   SQL_NOTFOUND returned as an ERROR value.   
      
   Do I have to somehow turn off error processing before this query. In Pro*C I   
   can do this with the   
   EXEC SQL WHENEVER ERROR CONTINUE:   
      
   ideas?   
      
      
      
   "Mike Stenzler"  wrote in message   
   news:BAOWb.78592$va1.36814@fe23.usenetserver.com...   
   > This may be obvious, but I don't write many triggers so it's got me   
   > puzzled..   
   >   
   > Row level, after update trigger is designed to perform an insert or update   
   > to a 2nd table based on existance of a record in the 2nd table.   
   >   
   > t1 is updated and has trigger, whenever an update happens, it inserts or   
   > updates a record in t2. If there has already been an insert "today" (using   
   > SYSDATE w/ timestamp stripped out) we perform an update on t2, otherwise   
   we   
   > insert.   
   >   
   > Problem is code works fine if we comment out the check for existance and   
   > just insert records. code works OK if there is an existing record and we   
   > perform an update. However - if we check for existance and there is no   
   > record, instead of inserting, we come up with an error saying we can't   
   > perform an update - another process has a lock.   
   >   
   > DATA   
   >   
   > CREATE TABLE TEST.T1   
   > (   
   > CMDY_SYM     VARCHAR2(6)   
   > ,ZONE1              NUMBER(6,2)   
   > );   
   >   
   > CREATE TABLE TEST.T2   
   > (   
   > LAST_CHANGE     DATE,   
   > CMDY                     VARCHAR2(6)   
   > ,GV                          NUMBER(6,2)   
   > );   
   >   
   > code:   
   >   
   > "TEST"."AUROW_GRID_CLONE" AFTER   
   > UPDATE OF "ZONE1" ON "TEST"."T1" FOR EACH ROW   
   >   
   > declare v_exists VARCHAR2(6) :='FALSE';   
   >   
   > BEGIN   
   >   
   > -- test if record has already been inserted today   
   > select 'TRUE' into v_exists from DUAL where EXISTS   
   >  (select * from test.t2   
   >  where last_change = TO_DATE(TO_CHAR(SYSDATE(),   
   'MM-DD-YYYY'),'MM-DD-YYYY')   
   >   and cmdy = :new.cmdy_sym   
   >   );   
   >   
   > if (v_exists = 'TRUE') then   
   >     update test.t2   
   >       set gv = :new.zone1   
   >       where last_change = TO_DATE(TO_CHAR(SYSDATE(),   
   > 'MM-DD-YYYY'),'MM-DD-YYYY')   
   >       and cmdy = :new.cmdy_sym;   
   > else   
   >     insert into test.t2   
   >      ( last_change, cmdy, gv )   
   >      values   
   >      (   
   >       TO_DATE(TO_CHAR(SYSDATE(),'MM-DD-YYYY'),'MM-DD-YYYY'),   
   >       :new.cmdy_sym,   
   >       :new.zone1   
   >       );   
   > end if;   
   >   
   > END;   
   >   
   > Any ideas as to whart I'm doing wrong?   
   >   
   > Oracle 9.2.0.3   
   >   
   > Mike   
   >   
   >   
   >   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca