sql >> Databasteknik >  >> RDS >> Oracle

Infogar i Oracle och hämtar det genererade sekvens-ID:t

Utvidgar du lite på svaren från @Guru och @Ronnis, du kan dölja sekvensen och få den att se mer ut som en automatisk ökning med hjälp av en utlösare, och ha en procedur som gör insättningen åt dig och returnerar det genererade ID:t som ett ut 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;
/

Du kan då anropa proceduren istället för att göra en vanlig insättning, t.ex. från ett anonymt block:

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

Du kan ringa samtalet utan en explicit anonym blockering, t.ex. från SQL*Plus:

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

... och använd bindningsvariabeln :l_batchid för att hänvisa till det genererade värdet efteråt:

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


  1. Konvertera 'smalldatetime' till 'time' i SQL Server (T-SQL-exempel)

  2. Lägg till en beräknad kolumn till en befintlig tabell i SQL Server

  3. Index autoinkrement för Microsoft SQL Server 2008 R2

  4. Prestandatestmetoder:Upptäcka ett nytt sätt