重复的Oracle序列

时间:2018-02-05 01:56:14

标签: php oracle laravel-5.1 oci

我在Laravel 5.1中使用oracle序列和yajra / laravel-oci8库(v.5.1)时遇到问题。

我的情景是:

  1. 我在表A中有一个名为trailer_id的列。
  2. 该列包含使用名为trailed_id_seq的序列生成的ID。代码:

    function postCreate(Request $request) {
        $id = $request->input('id');
    
        DB::beginTransaction();
    
        ....
    
        $running_no_seq = DB::getSequence();
        $trailer_id = $running_no_seq->nextValue('trailer_id_seq')."";
    
        for($i=0; $i < $counter; $i++) {
           // Some process, it can take a while here...
        }
    
        DB::table('A')->where('id',$id)->update([
           'trailer_id' => $trailer_id
        ]);
    
        DB::commit();
    }
    

    trailer_id_seq序列的属性(在Navicat应用程序中捕获): enter image description here

  3. 许多用户都可以调用此功能。

  4. 问题是:

    为什么trailer_id列在不同时间由不同用户访问时可能会重复?

    这里有一些例子:(created_by是用户ID) enter image description here

    我的问题:这怎么可能?我怎么修理它? (我无法将trailer_id列设为唯一的)

    我已经阅读了yajra oci docs: https://yajrabox.com/docs/laravel-oci8/master/sequence,是代码DB::getSequence()->nextValue('seq_name');只返回下一个值而不更新序列?

    因为在oracle文档中,nextval会递增序列并返回下一个值(https://docs.oracle.com/cd/A84870_01/doc/server.816/a76989/ch26.htm#4062)。

    请帮帮我。谢谢你的回答!

0 个答案:

没有答案