마지막으로 삽입한 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
).
다음을 검색할 수 있는 방법이 없습니다.IDENTITY
MySQL, 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
'programing' 카테고리의 다른 글
Angular 6 Unit Tests: All\nReferenceError: 뒤에 오류가 발생했습니다.변수를 찾을 수 없음: $가 던져졌습니다. (0) | 2023.08.02 |
---|---|
Swift에서 장치 방향 가져오기 (0) | 2023.08.02 |
Oracle 시퀀스가 1이 아닌 2로 시작함 (0) | 2023.08.02 |
대형 이미지에서 xxhdpi, xhdpi, hdpi, mdpi 및 ldpi 드로잉을 생성할 수 있는 방법이 있습니까? (0) | 2023.08.02 |
아약스 업데이트된 디비를 페이드 인으로 만드는 중. (0) | 2023.08.02 |