CREATE TABLE TEST_TYPE (
TEST_TYPE_ID  NUMBER(10) PRIMARY KEY  ,
NAME VARCHAR2(256 BYTE) ,
DESCRIPTION VARCHAR2(256))
INSERT INTO "TEST_TYPE" VALUES ('1', 'School', 'description2');
INSERT INTO "TEST_TYPE" VALUES ('2', 'Military', 'description1');以上是表和表内的数据,我想请问下,如何写触发器就每一次插入,以这样的顺序School0000001,Military0000001这样自增,怎么写触发器,在学校只学了一点点而已,希望有写过的高手,帮我写下,谢谢了,在线等。

解决方案 »

  1.   


    create or replace trigger testTri
    before insert test_type 
    for each row 
    begin 
     v_name varchar2;
    begin 
      select youSeq.nextVal into v_name from dual;
      :new.name : = :new.name||v_name;
    //todo
    end;
      

  2.   

    什么意思,自增的不是id而是name?
    如何自增法,school和military
    总有一个规则吧
      

  3.   

    就是如果NAME 是SCHOOL的话重复了,所以要有流水号SCHOOL0000001-------一直增,military 
    也是,就是不知道写,我同事有说可以按test_type_id来写,这个主键,但是不懂,我没写过,希望有写过的帮我写下,谢谢了
      

  4.   

    是否:主键用序列自增
    name按一个school一个military的规律
    交错
      

  5.   

    --前提是name 字段的值后面的序列是同样长度,比如后面的数字字符串是7位
    --建议一个先 主键系列表
    CREATE TABLE TEST_xlh ( 
    xlh  NUMBER(10) PRIMARY KEY  , 
    NAME VARCHAR2(256 BYTE));
    --再建立触发器
    create or replace trigger testTri
    before insert test_type 
    for each row 
    begin 
     v_name varchar2;
     v_xlh  number(12,0);
    begin 
      --:new.name 是SCHOOL或military .....
      --根据name 查找 TEST_xlh 表是否存在记录 
            slect xlh ,name into v_xlh  ,v_name from test_xlh where ......
    --如果存在则
        if v_xlh   >0 then 
           update   test_xlh set xlh=xlh+1 where name=:   v_name;
          :new.name =v_name||to_char(v_xlh,'0000000');
        else
          insert into test_xlh (1,:new.name);
          :new.name =v_name||'0000001';
        end if
    //todo
    end;
      

  6.   

    请大家帮帮忙,之前我不懂得意思说错了,真不好意思
    现在重说一下,一下是表
    CREATE TABLE "ASSOCIATE" (
    "ASSOCIATE_ID" NUMBER(10) PRIMARY KEY ,
    "ASSOCIATE_TYPE_ID" NUMBER(10) NULL,
    "CODE_NAME" VARCHAR2(256 BYTE) NULL ,
    "NAME" VARCHAR2(256 BYTE) NULL ,
    "ADDRESS" VARCHAR2(256 BYTE) NULL ) 
    上面ASSOCIATE_TYPE_ID是外键,我不写语句出来了,我简单说下CREATE TABLE "ASSOCIATE_TYPE" (
    "ASSOCIATE_TYPE_ID" NUMBER(10) primary key ,
    "NAME" VARCHAR2(256 BYTE) NULL ,
    "DESCRIPTION" VARCHAR2(256 BYTE) NULL )
    INSERT INTO "ASSOCIATE_TYPE" VALUES ('2', 'School', 'description2');
    INSERT INTO "ASSOCIATE_TYPE" VALUES ('1', 'Military', 'description1');
    两张表都有创建序列,我想问下就是根据界面添加ASSOCIATE时,ASSOCIATE TYPE可以选择NAME=SCHOOL或是NAMW=Military,选择其中一个,那么ASSOCIATE表的CODE_NAME就要自增变成SCHOOL00000001或是Military000000001每插入一次就自增,我不懂怎么写,麻烦有写过的帮我写,我不甚感激,谢谢了,在线等,急急急 只要insert不用update,谢谢; 
      

  7.   

    终于成功了,呵呵!谢谢大家的支持,我把我写的贴出来给大家看下。create or replace trigger associateTri 
    before insert on ASSOCIATE
    for each row 
    declare
    v_name varchar2(256); begin 
         select name into v_name from ASSOCIATE_TYPE where associate_type_id=:new.associate_type_id ;
         :new.code_name:=v_name||LPAD(:new.associate_id,8,'0');
        end;