php脚本修复oracle序列,重建序列

public function rebuild_seq(){
  set_time_limit(0);
  // 修复数据库中的序列
  $tables = M()->query("select table_name from all_tables where owner = 'QQG'");
  foreach($tables as $v){
     $tab = strtoupper($v['table_name']);
     // 如果此表没有序列,则跳过当前循环
     $seq = array_shift(M()->query("select * from user_sequences where sequence_name = 'SEQ_{$tab}'"));
     if(!$seq){
        continue;
     }
     $last_seq = $seq['last_number'];

     // 主键一般为第一个字段
     $fields = M()->query("select COLUMN_NAME from user_tab_columns where table_name ='{$tab}' order by COLUMN_ID asc");
     $pkey = array_shift($fields)['column_name'];

     // 取出表的当前序列为多少
     $last = array_shift(M()->query("select {$pkey} from {$tab} order by {$pkey} desc"));
     if(empty($last)){
        continue;
     }
     $pkey = strtolower($pkey);
     $last_pkey = intval($last[$pkey]);

     // 将序列修改到比表当前序列高一
     if($last_seq < $last_pkey && $last_pkey < 1000000){
        for($i=$last_seq;$i<=$last_pkey+1;$i++){
           M()->query("select seq_{$tab}.nextval from dual");
        }
        echo($tab);
        echo $last_seq.'-'.$last_pkey;
        echo '<br/>';
     }
  }
}