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

Memasukkan ke Oracle dan mengambil ID urutan yang dihasilkan

Memperluas sedikit jawaban dari @Guru dan @Ronnis, Anda dapat menyembunyikan urutan dan membuatnya lebih terlihat seperti peningkatan otomatis menggunakan pemicu, dan memiliki prosedur yang memasukkan untuk Anda dan mengembalikan ID yang dihasilkan sebagai keluar parameter.

create table batch(batchid number,
    batchname varchar2(30),
    batchtype char(1),
    source char(1),
    intarea number)
/

create sequence batch_seq start with 1
/

create trigger batch_bi
before insert on batch
for each row
begin
    select batch_seq.nextval into :new.batchid from dual;
end;
/

create procedure insert_batch(v_batchname batch.batchname%TYPE,
    v_batchtype batch.batchtype%TYPE,
    v_source batch.source%TYPE,
    v_intarea batch.intarea%TYPE,
    v_batchid out batch.batchid%TYPE)
as
begin
    insert into batch(batchname, batchtype, source, intarea)
    values(v_batchname, v_batchtype, v_source, v_intarea)
    returning batchid into v_batchid;
end;
/

Anda kemudian dapat memanggil prosedur alih-alih melakukan penyisipan biasa, mis. dari blok anonim:

declare
    l_batchid batch.batchid%TYPE;
begin
    insert_batch(v_batchname => 'Batch 1',
        v_batchtype => 'A',
        v_source => 'Z',
        v_intarea => 1,
        v_batchid => l_batchid);
    dbms_output.put_line('Generated id: ' || l_batchid);

    insert_batch(v_batchname => 'Batch 99',
        v_batchtype => 'B',
        v_source => 'Y',
        v_intarea => 9,
        v_batchid => l_batchid);
    dbms_output.put_line('Generated id: ' || l_batchid);
end;
/

Generated id: 1
Generated id: 2

Anda dapat melakukan panggilan tanpa blok anonim eksplisit, mis. dari SQL*Plus:

variable l_batchid number;
exec insert_batch('Batch 21', 'C', 'X', 7, :l_batchid);

... dan gunakan variabel ikat :l_batchid untuk merujuk ke nilai yang dihasilkan setelahnya:

print l_batchid;
insert into some_table values(:l_batch_id, ...);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hal Yang Harus Anda Ketahui Sebelum Mempelajari Oracle

  2. Bagaimana cara mendapatkan baris terakhir dari tabel Oracle

  3. Kueri berparameter C# untuk Oracle - bug serius &berbahaya!

  4. Menggunakan `SELECT` untuk memanggil fungsi

  5. Cara Mencadangkan RAC VM