Denny Kusumah wrote:
>
> Dear Mas/Pak Awaluddin Hamid
> Script yang Anda contoh kan memang berhasil dan saya sudah mencobanya,
> namun yang saya maksudkan adakah script untuk mereset sequence
> tanpa harus menggunakan script 'alter sequence', kalau menggunakan
> script ini artinya nilai sequence nya dikurangi dulu dari nilai parameter
> yang di-input.
> Terima kasih atas penjelasan-nya Mas/Pak Awaluddin Hamid
>
>
>
>
Kalau yg dimaksud klausa/keyword yang ada di SEQUENCE untuk mereset
nilai sequence secara manual, AFAIK, tidak ada (CMIIW).
Biasanya digunakan kombinasi MAXVALUE dan CYCLE untuk otomatisasi reset
nilai sequence.
Jika reset akan dilakukan manual, maka cara yg saya sebutkan sebelumnya
yg biasanya digunakan.
Nilai parameter yg diinput itu otomatis diambil dari nilai sequence
terakhir, jadi bukan diinput manual.
Dan contohnya itu jika dijalankan manual di SQL*Plus.
Agar lebih jelas akan coba saya contohkan jika pakek procedure (Seperti
saran saya sebelumnya):
- Create procedure
SQL> CREATE OR REPLACE PROCEDURE reset_sequence (
2 seq_name IN VARCHAR2, -- nama sequence
3 startvalue IN PLS_INTEGER -- reset ke nilai ini
4 ) AS
5 cval INTEGER;
6 inc_by VARCHAR2(25);
7 BEGIN
8 EXECUTE IMMEDIATE 'ALTER SEQUENCE ' ||seq_name||' MINVALUE 0';
9 EXECUTE IMMEDIATE 'SELECT ' ||seq_name ||'.NEXTVAL FROM dual'
10 INTO cval;
11 cval := cval - startvalue + 1;
12 IF cval < 0 THEN
13 inc_by := ' INCREMENT BY ';
14 cval:= ABS(cval);
15 ELSE
16 inc_by := ' INCREMENT BY -';
17 END IF;
18 EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || seq_name || inc_by ||
19 cval;
20 EXECUTE IMMEDIATE 'SELECT ' ||seq_name ||'.NEXTVAL FROM dual'
21 INTO cval;
22 EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || seq_name ||
23 ' INCREMENT BY 1';
24 END reset_sequence;
25 /
Procedure created.
- Cek nilai sequence
SQL> SELECT tcnpm004s.NEXTVAL FROM dual;
NEXTVAL
----------
4
- Jika akan melakukan reset sequence, tinggal panggil procedure
SQL> BEGIN
2 reset_sequence('tcnpm004s',1);
3 END;
4 /
PL/SQL procedure successfully completed.
- Cek nilai terkini
SQL> SELECT tcnpm004s.NEXTVAL FROM dual;
NEXTVAL
----------
1
Maksud saya, sekalipun pemanggilan procedure (untuk reset sequence)
dilakukan explicit, tapi pengisian parameter pengurangnya itu dikerjakan
otomatis.
rgds,
AH