복붙노트

[SQL] 오라클에게 마지막 삽입 IDENTITY 검색

SQL

오라클에게 마지막 삽입 IDENTITY 검색

오라클 12C 때문에 우리는 IDENTITY 필드를 사용할 수 있습니다.

(즉, @@ ID를 선택하거나 LAST_INSERTED_ID ()를 선택 등) 마지막으로 삽입 된 ID를 검색 할 수있는 방법이 있습니까?

해결법

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

    1.잘. 오라클은 12C에 IDENTITY 기능에 대한 순서 및 기본 값을 사용합니다. 따라서 당신은 당신의 질문에 대한 시퀀스에 대해 알 필요가있다.

    잘. 오라클은 12C에 IDENTITY 기능에 대한 순서 및 기본 값을 사용합니다. 따라서 당신은 당신의 질문에 대한 시퀀스에 대해 알 필요가있다.

    첫 번째 테스트 신원 테이블을 만듭니다.

    CREATE TABLE IDENTITY_TEST_TABLE
    (
      ID NUMBER GENERATED ALWAYS AS IDENTITY 
    , NAME VARCHAR2(30 BYTE) 
    );
    

    첫째,이 ID 열 생성 시퀀스 이름을 찾을 수 있습니다. 이 시퀀스의 이름은 테이블에 기본값입니다.

    Select TABLE_NAME, COLUMN_NAME, DATA_DEFAULT from USER_TAB_COLUMNS
    where TABLE_NAME = 'IDENTITY_TEST_TABLE';
    

    나를 위해이 값은 "_ 193,606 ISEQ $$"입니다

    일부 값을 삽입합니다.

    INSERT INTO IDENTITY_TEST_TABLE (name) VALUES ('atilla');
    INSERT INTO IDENTITY_TEST_TABLE (name) VALUES ('aydın');
    

    다음 값을 삽입하고 정체성을 찾을 수 있습니다.

    INSERT INTO IDENTITY_TEST_TABLE (name) VALUES ('atilla');
     SELECT "ISEQ$$_193606".currval from dual; 
    

    당신은 당신의 ID 값을 볼 수 있습니다. 당신은 하나 개의 블록을 사용하고 싶은 경우

    declare
       s2 number;
     begin
       INSERT INTO IDENTITY_TEST_TABLE (name) VALUES ('atilla') returning ID into s2;
       dbms_output.put_line(s2);
     end;
    

    마지막 ID 내 ID 열 이름입니다.

  2. ==============================

    2.확인해주십시오

    확인해주십시오

    INSERT INTO yourtable (....)
      VALUES (...)
      RETURNING pk_id INTO yourtable;
    

    그것은 당신이 마지막으로 삽입 된 행을 검색하는 데 도움이 될 것입니다

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

    3.오라클은 단지 그들이 ID를 지원한다는 말을 IDENTITY를 구현 것으로 보인다. 모든 것은 여전히 ​​시퀀스를 사용하여 구현하고, 때때로 당신은 (즉, 최신 삽입 IDENTITY를 검색) 작업의 일부를 만들기 위해 SEQUENCE에 접근 할 필요가있다.

    오라클은 단지 그들이 ID를 지원한다는 말을 IDENTITY를 구현 것으로 보인다. 모든 것은 여전히 ​​시퀀스를 사용하여 구현하고, 때때로 당신은 (즉, 최신 삽입 IDENTITY를 검색) 작업의 일부를 만들기 위해 SEQUENCE에 접근 할 필요가있다.

    이 MySQL은, SQL 서버, DB2 유사한 IDENTITY를 검색 할 수있는 방법이없는 등, 당신은 SEQUENCE를 사용하여 검색 할 수 있습니다.

  4. ==============================

    4.생성하고 사용하는 테이블을 자동 서열 낙하 - IDENTITY 열은 "후드"시퀀스를 사용한다. 또한, 사용 시작 및 증가 매개 변수를 지정할 수 있습니다 그것은 당신이 직접의 값을 작동하지 않을 때 IDENTITY를 사용하는 정말 매우 편리 2. 1000 및 증가로 시작합니다.

    생성하고 사용하는 테이블을 자동 서열 낙하 - IDENTITY 열은 "후드"시퀀스를 사용한다. 또한, 사용 시작 및 증가 매개 변수를 지정할 수 있습니다 그것은 당신이 직접의 값을 작동하지 않을 때 IDENTITY를 사용하는 정말 매우 편리 2. 1000 및 증가로 시작합니다.

    어떻게 든 순서를 조작해야하는 경우 만 직접 사용한다 오라클 12C에서 사용할 수있는 다른 옵션 - 열 기본값. Sutch 기본 값은 시퀀스 또는 CURRVAL NEXTVAL로부터 생성 될 수있다. 당신이 이해할 수있는 시퀀스 이름을 가지고 트리거없이 "정체성"로 사용할 수 있도록합니다.

    create table my_new_table
    (id number default my_new_table_seq.nextval not null)
    

    my_new_table_seq.currval : 당신은 항상 호출 할 수 있습니다.

    RETURNING 절을 사용하여 삽입 문에 SEQUENCE에서 생성 된 ID를 얻을 수 있습니다.

    예를 들어, 임시 테이블을 만들 :

    create global temporary table local_identity_storage ("id" number) on commit delete rows
    

    임시 테이블에서이 값을 절약 삽입 몇 가지를 확인합니다 :

    CREATE TABLE identity_test_table (
      id_ident          NUMBER GENERATED BY DEFAULT AS IDENTITY,
      same_value VARCHAR2(100)
    );
    
    declare
      v_id number(10, 0);
    begin  
      INSERT INTO identity_test_table
        (same_value)
      VALUES
        ('Test value')
      RETURNING id_ident INTO v_id;
    
      insert into local_identity_storage ("id") values (v_id);
      commit;
    end;
    

    지금 당신은 "로컬"삽입 ID를 가지고있다.

    select "id" from local_identity_storage
    
  5. ==============================

    5.당신의 범위는 전역 또는 최종 사용자, 어떤 삽입? 글로벌 다만 사용하는 경우

    당신의 범위는 전역 또는 최종 사용자, 어떤 삽입? 글로벌 다만 사용하는 경우

    SELECT mytable_seq.nextval MyTableID FROM DUAL
    

    https://www.sitepoint.com/community/t/oracle-last-insert-id-question/1402

    특정 트랜잭션 내에서 삽입 및 쿼리를 캡슐화합니다.

  6. ==============================

    6.나는이 블로그 게시물에 서면으로 작성했습니다, 당신은 단일 쿼리와 스키마의 모든 현재 ID 값을 가져올 수 :

    나는이 블로그 게시물에 서면으로 작성했습니다, 당신은 단일 쿼리와 스키마의 모든 현재 ID 값을 가져올 수 :

    with
      function current_value(p_table_name varchar2) return number is
        v_current number;
      begin
        for rec in (
          select sequence_name
          from user_tab_identity_cols
          where table_name = p_table_name
        )
        loop
          execute immediate 'select ' || rec.sequence_name || '.currval from dual'
          into v_current;
          return v_current;
        end loop;
    
        return null;
      end;
    select *
    from (
      select table_name, current_value(table_name) current_value
      from user_tables
    )
    where current_value is not null
    order by table_name;
    /
    
  7. from https://stackoverflow.com/questions/34811283/retrieve-oracle-last-inserted-identity by cc-by-sa and MIT license