请大家帮忙写个触发器呢!

平生我自如 2009-11-30 02:12:30
我建了个序列:
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表中!
求大家帮帮忙!如何实现!如果需要触发器!如何写这个触发器!磕头拜谢了!
...全文
154 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
angello11 2009-12-07
  • 打赏
  • 举报
回复
接分
顺便为浪费时间答此帖者扼腕叹息
平生我自如 2009-12-07
  • 打赏
  • 举报
回复
要分的快点来了!要结题了
sjm5210 2009-12-03
  • 打赏
  • 举报
回复
菜鸟 飘过
小灰狼W 2009-12-03
  • 打赏
  • 举报
回复
问题是还不清楚你想要什么,你就要结帖了...
触发器是不行的
如果按你说的,每次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那样就可以了
crazylaa 2009-12-03
  • 打赏
  • 举报
回复
从来没有见识过select也能建触发器的!

看哪位高手解决喽,学习一下!
cosio 2009-12-02
  • 打赏
  • 举报
回复
关键是有没有解决你的问题,如果有,就结贴了!
平生我自如 2009-12-02
  • 打赏
  • 举报
回复
要结题了!大家都进来回答回答呢! 回答的人太少!不好结题呢
ojuju10 2009-11-30
  • 打赏
  • 举报
回复
用序列不可取,每次查询都不一样
create sequence zhai;
select zhai.nextval from dual
connect by rownum<=10

还不如用分析函数row_number()over(order by )
cosio 2009-11-30
  • 打赏
  • 举报
回复
序列和触发器都不用也是可以的! 
用分析函数 row_number()
考虑重复的话 dense_rank()

select order_no,row_number()over(parition by order_no order by order_no) order_new from table_name
平生我自如 2009-11-30
  • 打赏
  • 举报
回复
iqlife 2009-11-30
  • 打赏
  • 举报
回复
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;


自己改下触发器名、表名、序列名
shiyiwan 2009-11-30
  • 打赏
  • 举报
回复
insert into new_order select H_WO_HEAD_SEQ.nextval,order_no from table1;
小灰狼W 2009-11-30
  • 打赏
  • 举报
回复
不能对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

不行吗
平生我自如 2009-11-30
  • 打赏
  • 举报
回复
是啊!我查询到一个order_no,我就增加一个序列与其配对成为一条记录
小灰狼W 2009-11-30
  • 打赏
  • 举报
回复
每次查询,都要更新NEW_ORDER_NO?
不太明白

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧