你说得不太清楚,在A表的TRIGGER中调用函数再次象A中插数据,这种设计本身就存在着很大的问题。为何不在插入A表之前将预处理做完,然后再向A和B中插入对应的数据,将两个表的TRIGGER都去掉

解决方案 »

  1.   

    因为插A表的动作是一个PRO*C做的通信程序,监听SOCKET端口的报文,所以不能做太多的处理!PRO*C中的处理越简单,响应网络速度越快!
      

  2.   

    这样用触发器恐怕是做不到的,“另外可能会在P_A函数中再次向A表在插入数据,则会循环调用A_TRG”触发器中是不能对当前表进行操作的
      

  3.   

    在PRO*C中调用处理函数P_A,然后可以将触发器去掉,这样可行吗?
    可用AQ,是否可靠!?
      

  4.   

    如果比较重要的程序用AQ可以考虑
    如果普通或者级别没有那么高的话自己管理也比较好
    Proc*收到数据后写本地文件,顺序写,另外一个线程顺序读,然后向
    数据库中插入,基本不会影响速度实现速度接收>1000/s。
    写入〉200笔/秒
    如果还想快用共享内存,或直接虚拟硬盘
      

  5.   

    我们用PROC程序是先写到邮箱里,另外一个程序再监控邮箱,有数据再写入到数据库中,这样不影响接收的速度了,因为我们用的是小型机(OpenVMS操作系统),可利用操作系统的邮箱编程。我们的流程是这样的,Socket SERVER接数据,写到邮箱,监控邮箱的程序将数据写到表A,表A触发器调用P_A函数,该函数会写一条记录到表B,表B中的触发器会调用一个SOCKET CLIENT将数据发送给另外一个地方。
    注:我们的触发器和函数一般都很小,不超过50行,个别几个有近千行。
    不知这种方法是否可行!大家多指教!
      

  6.   

    Oracle在介绍触发器时,这样多级触发的情况,叫动态表。
    要解决多级触发的问题,可采用包来解决。
      

  7.   

    用包来做确实可以解决动态表的问题,但也难免会出现死锁(程序出现漏洞),所以我建议最好避免产生这种情况。如果一定要这样做,你需要查看一下书籍了,因为对于包的用法很复杂,这里很难说的明白。比如你可以看看:pl/sql或更专业些的书。
      

  8.   

    我有PLSQL的书,包也会用,但我不知道包如何解决动态表的问题,也就是多级触发,
    何况有好的选择,我也不想用触发器,可我找不到好的选择!各位给点帮助