Oracle存储过程实现多线程对表数据的抽取

原先使用ForUpdateSkipLocked,但直到11g,这个参数还未被正式支持,而且在此之上使用排序还存在问题,所以改用符合ANSI的ForUpdateNowait来实现。
CREATE   OR   REPLACE  PACKAGE BODY RESB_MT_TABLE_PKG  AS
  
--  Try to lock thw row by RowId
   --  1 Successful
   --  0 Failed
   FUNCTION  RESB_MT_LOCK_ROW(i_table_source  in   varchar2 , i_rid  in  rowid)
    
RETURN   NUMBER   IS
    o_ret_id 
number  : =   0 ;
  
BEGIN
    
EXECUTE  IMMEDIATE  ' select 1
    from 
'   ||  i_table_source  ||   '
   where rowid = :x
     for update nowait
'
      
INTO  o_ret_id
      USING i_rid;
    
RETURN   1 ;
  EXCEPTION
    
WHEN  OTHERS  THEN
      
IF  SQLCODE  =   - 54   THEN
        
RETURN   0 ;
      
ELSE
        RAISE;
      
END   IF ;
  
END ;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值