programing

마지막으로 삽입한 Oracle IDENTITY 검색

megabox 2023. 8. 2. 08:58
반응형

마지막으로 삽입한 Oracle IDENTITY 검색

Oracle 12c부터 IDENTITY 필드를 사용할 수 있습니다.

한 ID 마으로삽한 ID)를 할 수 ?select @@identity또는select LAST_INSERTED_ID()등등)?

글쎄요. Oracle은 12c의 IDENTITY 기능에 시퀀스와 기본값을 사용합니다.따라서 질문의 순서를 알아야 합니다.

먼저 테스트 ID 테이블을 만듭니다.

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';

이 값은 "ISEQ$_193606"입니다.

값을 삽입합니다.

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; 

당신은 당신의 정체성 가치를 봐야 합니다.한 블록에서 사용하려면

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

Last ID는 제 ID 열 이름입니다.

확인해주세요

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

마지막으로 삽입한 행을 검색하는 데 도움이 됩니다.

은 Oracle을 으로 보입니다.IDENTITY단지 그들이 정체성을 지지한다는 말입니다.모든 것은 여전히 다음을 사용하여 구현됩니다.SEQUENCES은 그고때때접필있습다니요가속할신당은리로▁the다▁you▁access▁and있에 접속해야 합니다.SEQUENCE일부 작업(즉, 가장 최근에 삽입된 항목 검색)을 수행합니다.IDENTITY).

다음을 검색할 수 있는 방법이 없습니다.IDENTITYMySQL, Server,로 MySQL, SQL Server, DB2를 .SEQUENCE.

IDENTITY에는 열를사니다합을 합니다.SEQUENCE hood" - "build hood"를사용하는 또한 1000으로 시작하고 2씩 증분하여 시작 파라미터와 증분 파라미터를 지정할 수 있습니다.정말 편리하게 사용할 수 있습니다.IDENTITY직접적으로 작동하지 않으려는 경우 해당 값을 확인할 수 있습니다.

그러나 시퀀스를 직접 조작해야 하는 경우 Oracle 12c 열 기본값에서 사용할 수 있는 다른 옵션을 사용해야 합니다.에서 생성될 수 .nextval또는currval이해할 수 있는 시퀀스 이름을 가지고 트리거 없이 "아이덴티티"로 사용할 수 있습니다.

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

할 수 있을 입니다: 지전수있다니습실하화언제든.my_new_table_seq.currval.

생된를 ID 져올수있에서 수 .SEQUENCE를사여삽에문을 사용한 RETURNING 조항.

예를 들어 임시 테이블을 만듭니다.

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

가 이 블로그 게시물에 썼듯이, 당신은 한 번의 쿼리로 스키마의 현재 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;
/

글로벌 사용자 또는 마지막 사용자 중 어떤 범위를 삽입했습니까?글로벌인 경우 그냥 사용

SELECT mytable_seq.nextval MyTableID FROM DUAL

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

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

마지막 삽입은 열의 가장 높은 값이 될 것입니다. 그래서 저는 그것을 하는 가장 쉬운 방법은 max() 방법이라고 생각합니다. 이런 것입니다.

select max(id) from table_name

언급URL : https://stackoverflow.com/questions/34811283/retrieve-oracle-last-inserted-identity

반응형