当在模式(MYSCHEMA)中创建表时,我需要创建一个触发器,在插入每个创建的表之前生成一个 ID 列(来自序列)。我怎样才能实现这一点?
我知道,如何通过触发器和序列实现 ID 列的生成,如下所示:
CREATE OR REPLACE TRIGGER TR1
BEFORE INSERT ON TB1
FOR EACH ROW
BEGIN
SELECT SQ1.nextval
INTO :new.primary_key_column
FROM dual;
END;
但我不知道,如何在我的模式中使用AFTER CREATE ON SCHEMA
触发器创建触发器......CREATE TABLE
BEFORE INSERT
我写了这段代码:
CREATE OR REPLACE TRIGGER /*APPROOT*/after_create_table_trigger
AFTER CREATE ON APPROOT.SCHEMA
DECLARE
TABLE_NAME VARCHAR2(100);
BEGIN
IF ORA_DICT_OBJ_TYPE = 'TABLE' THEN
SELECT 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 错误。
有人可以给我建议吗?
谢谢你。