Oracle
 sql >> база данни >  >> RDS >> Oracle

Вмъкване в Oracle и извличане на генерирания ID на последователност

Като разширите малко отговорите от @Guru и @Ronnis, можете да скриете последователността и да я направите да изглежда по-скоро като автоматично увеличение с помощта на тригер и да имате процедура, която прави вмъкването вместо вас и връща генерирания идентификатор като изход параметър.

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

След това можете да извикате процедурата, вместо да правите обикновен вмъкване, напр. от анонимен блок:

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

Можете да осъществите обаждането без изричен анонимен блок, напр. от SQL*Plus:

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

... и използвайте променливата за свързване :l_batchid за да се обърнете към генерираната стойност след това:

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. Oracle PL/SQL - Как да създадете обикновена променлива от масив?

  2. Свържете своя OEM към Grafana с помощта на приложението Enterprise Manager за Grafana

  3. Вмъкване на няколко записа в oracle

  4. Функция LISTAGG:резултатът от конкатенацията на низове е твърде дълъг

  5. Използване на Dapper с Oracle