Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chèn vào Oracle và truy xuất ID trình tự đã tạo

Mở rộng một chút về các câu trả lời từ @Guru và @Ronnis, bạn có thể ẩn chuỗi và làm cho nó trông giống như một phép tăng tự động bằng cách sử dụng trình kích hoạt và có một thủ tục thực hiện việc chèn cho bạn và trả về ID đã tạo như một dấu ngoặc tham số.

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;
/

Sau đó, bạn có thể gọi thủ tục thay vì thực hiện chèn đơn giản, ví dụ:từ một khối vô danh:

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

Bạn có thể thực hiện cuộc gọi mà không cần chặn ẩn danh rõ ràng, ví dụ:từ SQL * Plus:

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

... và sử dụng biến liên kết :l_batchid để tham chiếu đến giá trị được tạo sau đó:

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. Làm thế nào để cấu hình DbContext để hoạt động với Oracle ODP.Net và EF CodeFirst?

  2. Điều chỉnh hiệu suất PL / SQL cho các truy vấn ký tự đại diện LIKE '% ...%'

  3. Oracle:Tìm kiếm toàn văn với điều kiện

  4. Hàm RTRIM () trong Oracle

  5. Bộ kiểm tra thiết lập AOL / J