回答

收藏

创建新表时,在插入之前创建触发器生成ID列值

技术问答 技术问答 166 人阅读 | 0 人回复 | 2023-09-12

在模式中创建表(MYSCHEMA)在插入每个创建表之前,我需要创建一个从序列中生成的触发器ID列。如何实现这一点?
  c( ^8 i. x7 z1 q2 t' s2 F我知道如何通过触发器和序列来实现ID列的生成如下:  e4 S6 b. Y" P) Y5 \' j3 |
CREATE OR REPLACE TRIGGER TR1  BEFORE INSERT ON TB1  FOR EACH ROWBEGIN  SELECT SQ1.nextval    INTO :new.primary_key_column    FROM dual;END;但我不知道如何在我的架构中使用它AFTER CREATE ON SCHEMA触发器CREATE TABLE在BEFOREINSERT…然后创建触发器?
# ]" f; i- G9 F! q2 Y+ ^' R/ ?* x# M我写了这个代码:+ I  S! N# P. ^5 `: _& V0 H
CREATE OR REPLACE TRIGGER /*APPROOT*/after_create_table_triggerAFTER CREATE ON APPROOT.SCHEMADECLARE TABLE_NAME VARCHAR2(100);BEGINIF ORA_DICT_OBJ_TYPE = 'TABLE' THENSELECT ORA_DICT_OBJ_NAME INTO TABLE_NAME FROM DUAL;EXECUTE IMMEDIATE ('CREATE OR REPLACE TRIGGER id_table_gen  BEFORE INSERT ON ' || TABLE_NAME ||  ' FOR EACH ROW   BEGIN    SELECT APPROOT.AE_IDSEQ.NEXTVAL     INTO :new.ID     FROM dual;   END;');END IF;END;/然后,我用一个字段-ID我创建了测试表,但我的触发器不起作用…我认为使用事件属性函数ora_dict_obj_name原因是错的。0 _0 Y) u1 }+ P
有人能给我建议吗?& a* m3 U1 m5 _* i, l0 N; u
谢谢你。* j* O6 h5 t" C4 g) L
                                                                  B  F2 I" g- m
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则