我建了个序列:
create sequence H_WO_HEAD_SEQ
minvalue 1
maxvalue 999999
start with 21
increment by 1
cache 20
order;建了一个数据表:
create table NEW_ORDER
(
  NEW_ORDER_NO VARCHAR2(20) not null,//主键
  ORDER_NO     VARCHAR2(20) not null//外键(wo-head表的主键)
)现在!我有个sql语句 假如是 :select order_no from table1得到很多order_no ,
我希望一个order_no 配一个H_WO_HEAD_SEQ.nextval 来同步填充在new_order表中!
求大家帮帮忙!如何实现!如果需要触发器!如何写这个触发器!磕头拜谢了!

解决方案 »

  1.   

    每次查询,都要更新NEW_ORDER_NO?
    不太明白
      

  2.   

    是啊!我查询到一个order_no,我就增加一个序列与其配对成为一条记录
      

  3.   

    不能对select操作建触发器
    你要实现什么需求
    按你这么说,原表中ORDER_NO对应的NEW_ORDER_NO为空?你要填充一个新id进去,只要不会重复就行了
    为什么每次查询都要重新对NEW_ORDER_NO赋值呢?一次性进行更新
    update new_order set NEW_ORDER_NO=H_WO_HEAD_SEQ.nextval
    where NEW_ORDER_NO is null不行吗
      

  4.   

    insert into new_order select H_WO_HEAD_SEQ.nextval,order_no from table1;
      

  5.   

    CREATE TRIGGER TRGname
    BEFORE INSERT ON table_name
    REFERENCING
    NEW AS :NEW
    FOR EACH ROW
    Begin
    SELECT SEQname.NEXTVAL
    INTO :NEW.FIELDname
    FROM DUAL;
    End;
    自己改下触发器名、表名、序列名 
      

  6.   

    序列和触发器都不用也是可以的! 
    用分析函数 row_number()
    考虑重复的话 dense_rank()select order_no,row_number()over(parition by order_no order by order_no) order_new from table_name
      

  7.   

    用序列不可取,每次查询都不一样
    create sequence zhai;
    select zhai.nextval from dual
    connect by rownum<=10还不如用分析函数row_number()over(order by )
      

  8.   

    从来没有见识过select也能建触发器的!看哪位高手解决喽,学习一下!
      

  9.   

    问题是还不清楚你想要什么,你就要结帖了...
    触发器是不行的
    如果按你说的,每次select都往新表插入数据。不能用触发器,可以用自定义自治事务函数
    例子如下
    create or replace function func1(ordno in number)return number
    as
    newno number;
    pragma autonomous_transaction;
    begin
    select H_WO_HEAD_SEQ.nextval into newno from dual;
    insert into new_order values(newno,ordno);
    commit;
    return ordno;
    end;然后查询
    select func1(order_no) from table1
    查询的结果还是order_no,但函数会将查询出现的order_no加上新的序号填充到新表中。这样没查询一次都会在新表里插入记录
    如果只需要插入一次,就不用写函数,像shiyiwan那样就可以了