sql >> Database teknologi >  >> RDS >> Oracle

Indsætter i Oracle og henter det genererede sekvens-id

Udvider du en smule på svarene fra @Guru og @Ronnis, kan du skjule sekvensen og få den til at ligne en automatisk stigning ved hjælp af en trigger, og have en procedure, der laver indsættelsen for dig og returnerer det genererede ID som en ud 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 så kalde proceduren i stedet for at lave et almindeligt indstik, f.eks. fra en anonym blok:

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 foretage opkaldet uden en eksplicit anonym spærring, f.eks. fra SQL*Plus:

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

... og brug bindevariablen :l_batchid for at henvise til den genererede værdi efterfølgende:

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


  1. MySQL-serverstartfejl 'Serveren afsluttede uden at opdatere PID-fil'

  2. postgresql-sekvens nextval i skema

  3. MariaDB DEFAULT() Forklaret

  4. Sådan forbinder du SalesForce som en datakilde i Pyramid