【问题标题】:Use trigger to generate a primary key in oracleoracle中使用触发器生成主键
【发布时间】:2014-05-09 13:39:52
【问题描述】:

New 我想在我的 oracle 数据库中创建一个触发器来为每个新行生成主键。 pk 包含两部分,第一部分是to_char(sysdate, 'yyyyMMddHH24mmss'),第二部分是由序列生成的ID,如to_char(SEQ_A_ID,FM000000)SEQ_A 是一个从 1 开始的 int 序列,增量为 1。我的 pk 数据类型是 varchar2(20)

现在我这样写 SQL:

CREATE OR REPLACE TRIGGER "DEMO"."TRIGGER_A_ID" BEFORE INSERT ON "DEMO"."A" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW ENABLE
BEGIN
   select to_char(sysdate,‘yyyyMMddHH24mmss’) || to_char(SEQ_A_ID.nextval,'FM00000') into :new.id  from dual;
END;;

上面的SQL有一些错误,但是我不知道将select语句的结果放入我的pk的正确方法。

【问题讨论】:

    标签: sql oracle triggers


    【解决方案1】:
    create or replace trigger "DEMO"."TRIGGER_A_ID"
       before insert on "DEMO"."A"
       referencing old as "OLD" new as "NEW"
       for each row enable
    
       l_id varchar2(20);
    begin
       select to_char(sysdate, ‘yyyymmddhh24mmss’) || to_char(seq_a_id.nextval, 'FM00000')
         into l_id
         from dual;
    
         :new.id:= l_new_id;
    end;
    

    【讨论】:

    • 跳过SELECT,直接做:new.id := to_char(sysdate, ‘yyyymmddhh24mmss’) || to_char(seq_a_id.nextval, 'FM00000');
    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2012-01-28
    • 1970-01-01
    相关资源
    最近更新 更多