복붙노트

[SQL] 순서 및 트리거와 오라클 자동 증가가 제대로 작동하지 않습니다

SQL

순서 및 트리거와 오라클 자동 증가가 제대로 작동하지 않습니다

여기에 내가 오라클 데이터베이스에 자동 증가 변수를 만들기 위해이 코드를 가지고 내 문제는 :

CREATE TABLE Korisnici
    (
        id_korisnika number PRIMARY KEY,
        ime_korisnika varchar2(200),
        prezime_korisnika varchar2(200),
        broj_telefona varchar2(30),
        adresa_korisnika varchar2(400)
    )
    /

create sequence test_seq
start with 1 
increment by 1;

CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT ON Korisnici FOR EACH ROW
BEGIN
  SELECT test_seq.NEXTVAL
  INTO :NEW.id_korisnika
  FROM DUAL;
END;
/

나는 모든 것이 잘 작동 시작에서 시작하면, 나는 1,2,3,4로 번호가 .... 오라클 데이터베이스 연결이 다시 시작됩니다, 그래서 나는 다시 열 프로그램을 닫습니다. 나는 한 번 더 입력을 추가하고 난 20,21,22,23 같은 번호가 ... 내 안드로이드에 프로그램을 넣어 내가 30,31,33,34이 내가 입력 한 사용자가 다른 장치에서 연결 ...

왜 이런 일이 일어나고? 그리고 어떻게 그것을 해결하기 위해?

감사합니다

편집하다:

다음은 데이터베이스에서 데이터를 읽어 내 PROC입니다

CREATE OR REPLACE PROCEDURE Citanje_korisnika( p_rc OUT SYS_REFCURSOR )
AS
BEGIN
  OPEN p_rc
   FOR SELECT *
         FROM Korisnici;
END;

나는 오라클 데이터베이스 초보자의 비트입니다.

해결법

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

    1.NOCACHE와 순서를 지정하면 시간과 도움 20 개 번호를 캐싱 세션을 중지합니다.

    NOCACHE와 순서를 지정하면 시간과 도움 20 개 번호를 캐싱 세션을 중지합니다.

    create sequence test_seq
    start with 1 
    increment by 1
    NOCACHE;
    

    당신이 완전히 연속적인 순서를 기대하는 경우 그러나, 이것은 달성하기 매우 어렵다 - (예를 들어) 삽입이 롤백되는 경우 시퀀스에서 가져온 번호는 "손실"된다.

    당신이 COMMIT을 잊고하는 경우 귀하의 의견을 바탕으로, 궁금해?

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

    2.그것은 문제가되지 않습니다. 당신은 아마 시퀀스 생성 스크립트에 캐시 (10)을 지정했습니다. 당신이 변경하면이는 성능 히트의 비용으로, 간격에 도움이됩니다의 nocache,하지만 어떤 롤백이 완료 그들이 완전히 없어지지 않을거야, 살해 인서트 등의 값을 사용합니다. 톰 포스트 질문이를 참조하십시오.

    그것은 문제가되지 않습니다. 당신은 아마 시퀀스 생성 스크립트에 캐시 (10)을 지정했습니다. 당신이 변경하면이는 성능 히트의 비용으로, 간격에 도움이됩니다의 nocache,하지만 어떤 롤백이 완료 그들이 완전히 없어지지 않을거야, 살해 인서트 등의 값을 사용합니다. 톰 포스트 질문이를 참조하십시오.

    하루의 끝에서 그것은 조금도 중요하지한다. 당신이 당신의 테이블의 키와 끊어지지 않는 순서에 의존하는 경우 당신은 아마 당신의 데이터가 아닌 시퀀스에 문제가 있습니다.

  3. from https://stackoverflow.com/questions/9428212/oracle-autoincrement-with-sequence-and-trigger-is-not-working-correctly by cc-by-sa and MIT license