오라클 시퀀스 스스메 군
htps : // 기주 b. 코 m / 노보 w34 / 오라 c
오라클 시퀀스를 진행하는 방법으로
(1) DROP SEQUENCE하여 원하는 값을 시작 값으로 설정 CREATE SEQUENCE
(2) INCREMENT BY를 지정하여 ALTER SEQUENCE한다 (한 번의 nextval에서 원하는 값까지 푸는 것)
라는 방법이 대표적입니다.
참고 : htp // 비누 0807. 하테나 bぉg. 코m/엔트리/2015/08/27/155940
그러나 다음과 같은 문제를 생각할 수 있습니다.
(1)
순간이지만 시퀀스가 사라집니다.
(2)
시퀀스는 사라지지 않지만 관리자가 아닌 데이터베이스가 아닌 경우 ALTER하는 것을 느낄 수 있습니다.
다른 사람도 nextval 해 버리면 예정 이상으로 값이 진행된다
또는 원래 ALTER 권한이 없습니다.
그래서 가장 원시적인 방법 「오로지 nextval한다」를 PL/SQL로 자동화했습니다.
DECLARE
seqName VARCHAR2(128) := 'TEST_SEQ'; --シーケンス名をセットします
targetSeq number := 20000; --シーケンス終了値をセットします
seqSql varchar2(1000);
tempSeq number;
BEGIN
DBMS_OUTPUT.PUT_LINE('***** Oracle シーケンスすすめるくん Ver 1.0 *****');
DBMS_OUTPUT.PUT_LINE('処理対象シーケンス名:' || seqName);
seqSql := 'SELECT ' || seqName || '.nextval from dual';
DBMS_OUTPUT.PUT_LINE('実行SQL:' || seqSql);
EXECUTE IMMEDIATE seqSQl INTO tempSeq;
DBMS_OUTPUT.PUT_LINE('シーケンス現在値:' || tempSeq);
DBMS_OUTPUT.PUT_LINE('シーケンス終了値:' || targetSeq);
WHILE(tempSeq < targetSeq) loop
EXECUTE IMMEDIATE seqSQl INTO tempSeq;
END LOOP;
DBMS_OUTPUT.PUT_LINE('シーケンスが' || tempSeq ||'になりました。終了します。');
END;
/
실행 예
C:\Users\xxxx>sqlplus xxxx/xxxx@xxxx
SQL*Plus: Release 19.0.0.0.0 - Production on 水 3月 25 23:27:58 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
最終正常ログイン時間: 水 3月 25 2020 23:11:27 +09:00
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
に接続されました。
SQL> set serveroutput on
SQL> DECLARE
2 seqName VARCHAR2(128) := 'TEST_SEQ'; --シーケンス名をセットします
3 targetSeq number := 30000; --シーケンス終了値をセットします
4 seqSql varchar2(1000);
5 tempSeq number;
6 BEGIN
7 DBMS_OUTPUT.PUT_LINE('***** Oracle シーケンスすすめるくん Ver 1.0 *****');
8 DBMS_OUTPUT.PUT_LINE('処理対象シーケンス名:' || seqName);
9 seqSql := 'SELECT ' || seqName || '.nextval from dual';
10 DBMS_OUTPUT.PUT_LINE('実行SQL:' || seqSql);
11 EXECUTE IMMEDIATE seqSQl INTO tempSeq;
12 DBMS_OUTPUT.PUT_LINE('シーケンス現在値:' || tempSeq);
13 DBMS_OUTPUT.PUT_LINE('シーケンス終了値:' || targetSeq);
14
15 WHILE(tempSeq < targetSeq) loop
16 EXECUTE IMMEDIATE seqSQl INTO tempSeq;
17 END LOOP;
18
19 DBMS_OUTPUT.PUT_LINE('シーケンスが' || tempSeq ||'になりました。終了します。');
20 END;
21 /
***** Oracle シーケンスすすめるくん Ver 1.0 *****
処理対象シーケンス名:TEST_SEQ
実行SQL:SELECT TEST_SEQ.nextval from dual
シーケンス現在値:20001
シーケンス終了値:30000
シーケンスが30000になりました。終了します。
PL/SQLプロシージャが正常に完了しました。
Reference
이 문제에 관하여(오라클 시퀀스 스스메 군), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/noobow/items/4e23d81bc6cf494d8d32텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)