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

Tạo trình kích hoạt tạo giá trị cột ID trước khi chèn khi bảng mới được tạo

hoạt động tốt nếu tôi đặt tên lược đồ trong DDL.

SQL> connect sys/test as sysdba
Connected.
SQL> CREATE OR REPLACE TRIGGER after_create_table_trigger
  2  AFTER CREATE ON TEST.SCHEMA
  3  DECLARE
  4  TABLE_NAME VARCHAR2(100);
  5  BEGIN
  6  IF ORA_DICT_OBJ_TYPE = 'TABLE' THEN
  7  SELECT ORA_DICT_OBJ_NAME INTO TABLE_NAME FROM DUAL;
  8  EXECUTE IMMEDIATE
  9  ('CREATE OR REPLACE TRIGGER ID_TABLE_GEN
 10    BEFORE INSERT ON TEST.' || TABLE_NAME ||
 11    ' FOR EACH ROW
 12     BEGIN
 13      SELECT TEST.AE_IDSEQ.NEXTVAL
 14       INTO :new.ID
 15       FROM dual;
 16     END;');
 17  END IF;
 18  END;
 19  /

Trigger created.

SQL> connect test/test
Connected.
SQL> create table mytab(id number primary key, a varchar2(1));

Table created.

SQL> insert into mytab (a) values ('a');

1 row created.

SQL> select * From mytab;

        ID A
---------- -
         1 a


SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production

p.s. không cần phải làm gì

SELECT ORA_DICT_OBJ_NAME INTO TABLE_NAME FROM DUAL;

chỉ cần dán nó vào lệnh.

CREATE OR REPLACE TRIGGER ID_TABLE_GEN
  BEFORE INSERT ON APPROOT.' || ORA_DICT_OBJ_NAME ||



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để biên dịch tất cả các gói không hợp lệ trong lược đồ?

  2. Trình hướng dẫn mô hình dữ liệu thực thể có ngoại lệ khi cố gắng thêm kết nối Oracle mới

  3. Con trỏ Oracle để gán

  4. Lệnh gọi SQL Số hàng tối đa từ bảng tạm thời

  5. Trừ 30 năm kể từ ngày hiện tại trong Oracle SQL