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

Kích hoạt trong Oracle để tự động tăng một trường và chèn vào bảng liên kết

Bạn có thể sử dụng returning into mệnh đề của insert câu lệnh trả về users_id giá trị sau khi một bản ghi mới đã được chèn vào table1 . Ngoài ra, bạn có thể sử dụng user_seq.currval để nhận giá trị hiện tại của dãy. Đây là một ví dụ (Trong ví dụ này, một thủ tục lưu trữ đơn giản đã được triển khai để chứng minh việc sử dụng insert into mệnh đề. Bạn có thể triển khai một quy trình được lưu trữ tương tự theo yêu cầu của bạn):

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> 

Trong Oracle 11g trở đi, bạn có thể chỉ định trực tiếp giá trị chuỗi cho một biến:

: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. Cách giải quyết ORA-02014:không thể chọn CẬP NHẬT từ chế độ xem với DISTINCT, GROUP BY

  2. Giới thiệu về phần tử định dạng RM trong Oracle

  3. Chuyển đổi Unixtime sang Datetime SQL (Oracle)

  4. JDBC Oracle - Tìm nạp giải thích kế hoạch cho truy vấn

  5. Hàm NANVL () trong Oracle