firstly, oracle always create object name in capitalization except u use double "'" to contain object name.
so, "CREATE TRIGGER hahaTrigger" will create a object named "HAHATRIGGER", "SELECT 1 FROM sysobjects where name = 'hahaTrigger'" won't exist forever.second, oracle got before,after insert trigger. i'm not sure which kind of trigger u r currently using.third, i suppose that there are 3 possible reason. One is that two transcations cannot run trigger in parallel mode. one is that tigger got trouble in process base table. one is that select statement got trouble when read uncommit data from another transcation.  it's easy to check up.
:)Good luck.

解决方案 »

  1.   

    IF EXISTS (SELECT 1 FROM sysobjects where name = 'loopInsert')
    BEGIN
    DROP PROC loopInsert
    END
    GO
    CREATE PROC loopInsert
    WITH ENCRYPTION
    AS
    DECLARE @jj int
    SET @jj = 5000
    while (@jj>0)
    BEGIN
    insert  into member(lastname, firstname)  values("INGD", "有")
    END
    GO你写了一个死循环,@jj没有递增吧
      

  2.   

    swordmanli(太白)说的没错!
    在你的procedure中对表member执行了一个没有终止的循环,这时系统定会对该表进行表级锁定,在这期间任何对该表的其他操作都会给出进程锁定的错误,包括你的第四句插入!
      

  3.   

    sorry,是我弄错了。漏打上了set @jj = @jj -1不过一样是有如此错误发生!错误的信息是死锁,表明是两个操作在争夺资源并且各个对方所要拥有的资源。
    我是不明白触发器怎么会引起该问题?究竟是锁住了什么资源?在增夺什么资源?我只不过是insert而已,没有其它的操作。