Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Uruchom w Oracle, aby automatycznie zwiększyć pole i wstawić do tabeli asocjacji

Możesz użyć returning into klauzula insert instrukcja zwracająca users_id wartość po wstawieniu nowego rekordu do table1 . Możesz także użyć user_seq.currval aby uzyskać aktualną wartość sekwencji. Oto przykład (w tym przykładzie zaimplementowano prostą procedurę składowaną w celu zademonstrowania użycia insert into klauzula. Możesz zaimplementować podobną procedurę składowaną zgodnie z własnymi wymaganiami):

SQL> create table Tb_table_1(
  2    user_id number primary key,
  3    field_1 number
  4  );

Table created

SQL> 
SQL> create table Tb_table_2(
  2    user_id number references tb_table_1(user_id),
  3    name1 varchar2(17)
  4  );

Table created

SQL> create sequence user_seq
  2  start with 1
  3  increment by 1
  4  nomaxvalue;

Sequence created

SQL> 
SQL> create trigger user_trigger
  2  before insert on tb_table_1
  3  for each row
  4  begin
  5    select user_seq.nextval into :new.user_id from dual;
  6  end;
  7  /

Trigger created

  SQL> create or replace procedure Insert_Record
  2  is
  3    l_cur_id number;
  4  begin
  5    insert into Tb_table_1(Field_1)
  6      values(123)
  7    returning user_id into l_cur_id; -- store user_id of the new inserted record
  8    for i in 1..5                    -- in a local variable for later use  
  9    loop
 10      insert into tb_table_2(user_id, name1)  -- insert a bunch of sample data into table2 using previously stored user_id.
 11        values(l_cur_id, dbms_random.string('l', 7));
 12    end loop
 13    commit;
 14  end;
 15  /

Procedure created

SQL> select * from tb_table_1;

   USER_ID    FIELD_1
---------- ----------

SQL> select * from tb_table_2;

   USER_ID NAME1
---------- -----------------



SQL> exec insert_record;

PL/SQL procedure successfully completed

SQL> select * from tb_table_1
  2  ;

   USER_ID    FIELD_1
---------- ----------
         1        123

SQL> select * from tb_table_2;

   USER_ID NAME1
---------- -----------------
         1 jzsdbna
         1 ozbibgs
         1 btxrxcm
         1 hxwwpzc
         1 sdjbwzi

SQL> 

W Oracle 11g i nowszych możesz bezpośrednio przypisać wartość sekwencji do zmiennej:

:new.users_id := user_seq.nextval;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. odświeżenie zmienionego źródła łącza db (brama Oracle do serwera sql)

  2. Jak mogę zaktualizować wiersze, które nie są dopasowane w ŹRÓDŁO, wykonując MERGE w Oracle SQL?

  3. dane listygg do użytecznego formatu?

  4. Konfigurowanie wymagań wstępnych pakietu UTL_MAIL

  5. Zagnieżdżone funkcje agregujące