복붙노트

[SQL] 하나의 문에서 순서에서 쿼리 여러 NEXTVAL

SQL

하나의 문에서 순서에서 쿼리 여러 NEXTVAL

기본적으로, 시퀀스에서 천 NEXTVAL에 대한 쿼리해야합니다. 나는 루프를 조회 할 수 있습니다, 또는이 reeeeeally 큰 테이블과 조인을 통해 내가 그들을 쿼리 할 수 ​​있습니다.

덜 해키 방법이 있습니까?

UPD. 기본적으로, 객체에 대한 작업의 일정을 가지고있다. 각 객체는 생성 된 UUID 또는 데이터베이스에서 ID 중 하나를 갖는다. 내가 최적의 일정을 계산 한 후, 나는 DB로 작성해야하지만, 테이블의 모든 ID는 시퀀스에서해야합니다. 그래서 나는 그 순서에서 약간의 ID를 조회 할 필요가있다. 문제는 DB가 정말 나를 멀리 있기 때문에 쿼리를 반복하는 것은, 느린 것입니다, 나는 루프에서 쿼리의 수십를 실행시킬 수없는 느슨한 몇 초 동안. 그래서 나는 한 쿼리에서 모든 새로운 ID를 조회 할 필요가있다.

해결법

  1. ==============================

    1.당신은이를 사용할 수 있습니다 :

    당신은이를 사용할 수 있습니다 :

    select your_sequence.nextval
    from (
       select level 
       from dual 
       connect by level < 1000
    );
    
  2. ==============================

    2.당신이 그들과 함께 수행 할 작업에 따라 다릅니다.

    당신이 그들과 함께 수행 할 작업에 따라 다릅니다.

    당신이 테이블에 삽입하면 삽입 쿼리에 seq.nextval 사용할 수 있습니다. (AS는 여기에 설명 : 나는 순서 값이 오라클에 여러 행을 삽입 할 수 있습니까?)

    루프에서 사용할 경우, 해당 루프를 가져올 수 있습니다.

    당신은 무엇을 그들과 함께하고 싶어합니까?

    내가 아는 한, 당신은 순서에서 여러 값을 가져올 수 없습니다.

    최신 정보: a_horse_with_no_name의 aswer는 다음과 같이 개선 될 수있다 :

    select your_sequence.nextval
    from dual 
    connect by level < 1000
    

    :)

  3. ==============================

    3.뭔가 다른 마련했다 그래서 내 (H2) 단위 테스트 데이터베이스 "에 의해 연결"을 지원하지 않았다 :

    뭔가 다른 마련했다 그래서 내 (H2) 단위 테스트 데이터베이스 "에 의해 연결"을 지원하지 않았다 :

        with temp_id_table (lvl) as 
           (select 1 as lvl from dual 
            union all 
            select lvl+1 
              from temp_id_table 
              where lvl < 1000) 
        select sequence_name.nextval 
        from temp_id_table;
    
  4. ==============================

    4.

    select sequence_name.nextval
    from dual
    connect by level < number of values you want to print;
    
  5. from https://stackoverflow.com/questions/8292199/query-several-nextval-from-sequence-in-one-statement by cc-by-sa and MIT license