Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

jalankan urutan perubahan segera tidak berfungsi

Keduanya alter sequence pernyataan bekerja, itu kenaikan di antara yang tidak terjadi. nextval panggilan di loop Anda tidak sedang dievaluasi karena pernyataan pilih tidak mengirimkan outputnya ke mana pun. Dari dokumentasi , catatan yang merujuk pada apa yang Anda lakukan:

Jadi, Anda perlu memilih nilai itu menjadi sesuatu:

declare
 st VARCHAR(1024);
 val number;
begin
  for x in (SELECT sequence_name FROM USER_SEQUENCES) loop
      st := 'ALTER SEQUENCE ' || x.sequence_name ||  ' INCREMENT BY 1000';
      execute immediate st;
      st := 'select ' || x.sequence_name ||  '.nextval from dual';
      execute immediate st into val;
      st := 'ALTER SEQUENCE ' || x.sequence_name ||  ' INCREMENT BY 1';
      execute immediate st;
  end loop;
end;
/

Saya telah menambahkan val variabel, dan into val klausa pada eksekusi kedua segera.

Untuk menunjukkan bahwa itu berfungsi sekarang:

create sequence s42;

Sequence s42 created.

declare
 st VARCHAR(1024);
 n number;
begin
  for x in (SELECT sequence_name FROM USER_SEQUENCES) loop
      st := 'ALTER SEQUENCE ' || x.sequence_name ||  ' INCREMENT BY 1000';
      execute immediate st;
      st := 'select ' || x.sequence_name ||  '.nextval from dual';
      execute immediate st into n;
      st := 'ALTER SEQUENCE ' || x.sequence_name ||  ' INCREMENT BY 1';
      execute immediate st;
  end loop;
end;
/

anonymous block completed

select s42.nextval from dual;

   NEXTVAL
----------
      1001 

Tanpa into klausa, ini kembali dengan 1, bukan 1001, yang Anda lihat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. apakah ada fungsi untuk menerjemahkan data di sql

  2. Bagaimana cara menampilkan proses yang berjalan di Oracle DB?

  3. Menanyakan substring terhadap daftar nilai

  4. ORA-00904:ID:pengenal tidak valid

  5. Permintaan sql Oracle perlu diubah berdasarkan zona waktu