[SQL] 어떻게 증가없이 오라클 시퀀스의 현재 값을 검색하는?
SQL어떻게 증가없이 오라클 시퀀스의 현재 값을 검색하는?
를 증가시키지 않는 시퀀스의 값을 검색 할 수있는 SQL 명령이있다.
감사.
편집 및 결론
저스틴 동굴에서 언급 한 바와 같이 너무 일련 번호 "저장"을 시도하는 것이 유용 아니다
select a_seq.nextval from dual;
시퀀스 값을 확인하기 위해 충분한입니다.
이 최초의 질문에 대답 때문에 나는 여전히 좋은으로 올리 응답을 유지한다. 하지만 만약 당신이 그것을 수행하려는 경우 순서를 수정하지의 필요성에 대해 자신에게 물어.
해결법
-
==============================
1.
SELECT last_number FROM all_sequences WHERE sequence_owner = '<sequence owner>' AND sequence_name = '<sequence_name>';
당신은 user_sequences, all_sequences 및 dba_sequences에서 시퀀스 다양한 메타 데이터를 얻을 수 있습니다.
이러한 뷰는 세션에 걸쳐 작동합니다.
편집하다:
경우 순서는 기본 스키마에 있습니다 :
SELECT last_number FROM user_sequences WHERE sequence_name = '<sequence_name>';
당신은 모든 메타 데이터를 원하는 경우 :
SELECT * FROM user_sequences WHERE sequence_name = '<sequence_name>';
희망이 도움이 ...
Aaditi :
더 안정적으로 캐시 크기가 1이 아닌 것 인 경우 그 일의 긴 장황한 방법 :
SELECT increment_by I FROM user_sequences WHERE sequence_name = 'SEQ'; I ------- 1 SELECT seq.nextval S FROM dual; S ------- 1234 -- Set the sequence to decrement by -- the same as its original increment ALTER SEQUENCE seq INCREMENT BY -1; Sequence altered. SELECT seq.nextval S FROM dual; S ------- 1233 -- Reset the sequence to its original increment ALTER SEQUENCE seq INCREMENT BY 1; Sequence altered.
그들이 (또는)받을 수 있습니다 - 그냥 다른 사람이이 시간 동안 순서를 사용하는 경우 조심하십시오
ORA-08004: sequence SEQ.NEXTVAL goes below the sequences MINVALUE and cannot be instantiated
또한, 당신은 당신이 값을 많이 캐시되지했는지 확인 이후 다시 원래 값으로 이전 재설정에 다음 NOCACHE에 캐시를 설정할 수 있습니다.
-
==============================
2.DUAL에서 MY_SEQ_NAME.currval을 선택;
DUAL에서 MY_SEQ_NAME.currval을 선택;
당신이 DUAL에서 MY_SEQ_NAME.nextval를 선택하여 실행 한 경우에만 작동 명심하십시오; 현재 세션한다.
-
==============================
3.내 원래의 대답은 사실에 입각하여 정확하고 나는 그것을 제거 기뻐요. 다음과 같은 조건에서 의지 작업 아래의 코드는) 당신은 순서가 세션에 의해 수정 된) 다른 그 누구도 시퀀스 B를 수정되지 알고있다. 내가 값을 수정 프로 시저를 호출하고 있었고, 난이 가정이 사실 확신 어디에 내 경우, 나는 비슷한 문제가 발생했습니다.
내 원래의 대답은 사실에 입각하여 정확하고 나는 그것을 제거 기뻐요. 다음과 같은 조건에서 의지 작업 아래의 코드는) 당신은 순서가 세션에 의해 수정 된) 다른 그 누구도 시퀀스 B를 수정되지 알고있다. 내가 값을 수정 프로 시저를 호출하고 있었고, 난이 가정이 사실 확신 어디에 내 경우, 나는 비슷한 문제가 발생했습니다.
SELECT mysequence.CURRVAL INTO v_myvariable FROM DUAL;
당신이 당신의 세션에서 순서를 수정하지 않은 경우 슬프게도, 나는 다른 사람들이 NEXTVAL가 갈 수있는 유일한 방법이라고 주장에서 올바른 생각합니다.
-
==============================
4.이건 정말, 대답하지 않고 주석이 문제가되지 잠겨 있었다 나는 그것을 입력 한 것입니다. 이 질문에 대한 답 :
이건 정말, 대답하지 않고 주석이 문제가되지 잠겨 있었다 나는 그것을 입력 한 것입니다. 이 질문에 대한 답 :
왜 당신이 그것을 원하는 것?
당신이 기본 키 순서로 테이블이 있고 시퀀스가 삽입 트리거에 의해 생성되는 가정합니다. 이 기록에 대한 후속 업데이트에 사용할 수있는 순서를 가지고 싶었다면, 당신은 그 값을 추출 할 수있는 방법이 필요합니다.
당신이 바로 하나를 얻을 수 있도록하기 위해, 당신은 INSERT 및 거래에 RonK의 쿼리를 포장 할 수 있습니다.
Ronk의 쿼리 :
select MY_SEQ_NAME.currval from DUAL;
위의 시나리오에서, RonK의주의해야 할 점은 삽입 이후에는 적용되지 않으며 업데이트는 같은 세션에서 일어날 것입니다.
-
==============================
5.나는 또한 어떤 프로세스가 기본 키 그 순서와 일부 테이블에 새 행을 삽입 한 경우 알아 내 경우 CURRVAL을 사용하려고했습니다. 내 가정은 CURRVAL 가장 빠른 방법이 될 것이라고했다. 그러나) CURRVAL은 다른 오라클 세션에 있기 때문에 당신이 당신의 자신의 세션에서 NEXTVAL을 할 때까지 그냥 이전 값을 얻을 것이다,하지 작업을 수행합니다. 그리고 b)는 TheTable에서 선택 최대 (PK)는 PK가 항상 색인 아마도 때문에, 매우 빠릅니다. 또는 TheTable에서 COUNT (*)을 선택합니다. 나는 아직도 실험하고 있지만, 모두에 select 빠른 것 같다.
나는 또한 어떤 프로세스가 기본 키 그 순서와 일부 테이블에 새 행을 삽입 한 경우 알아 내 경우 CURRVAL을 사용하려고했습니다. 내 가정은 CURRVAL 가장 빠른 방법이 될 것이라고했다. 그러나) CURRVAL은 다른 오라클 세션에 있기 때문에 당신이 당신의 자신의 세션에서 NEXTVAL을 할 때까지 그냥 이전 값을 얻을 것이다,하지 작업을 수행합니다. 그리고 b)는 TheTable에서 선택 최대 (PK)는 PK가 항상 색인 아마도 때문에, 매우 빠릅니다. 또는 TheTable에서 COUNT (*)을 선택합니다. 나는 아직도 실험하고 있지만, 모두에 select 빠른 것 같다.
나는 순서에서 틈을 신경 쓰지 않지만, 내 경우에는 내가 폴링을 많이 생각하고, 나는 매우 큰 격차의 아이디어를 싫어한다. 특히 간단한 경우 SELECT는 빨리 될 것이다.
결론:
from https://stackoverflow.com/questions/10210273/how-to-retrieve-the-current-value-of-an-oracle-sequence-without-increment-it by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 특정 열 이름을 가진 테이블에 대한 Oracle 데이터베이스를 검색? (0) | 2020.05.30 |
---|---|
[SQL] 어떻게 선택 모든 행에 열 값이 고유없는 경우에는 (0) | 2020.05.30 |
[SQL] FULL의 차이는 가입 및 INNER는 가입 (0) | 2020.05.30 |
[SQL] 어떻게 SQL Server의 소수점 값을 저장하는 방법? (0) | 2020.05.30 |
[SQL] LIKE 대 전체 텍스트 검색 무엇입니까 (0) | 2020.05.30 |