有一个表,结构如下:
CREATE TABLE PLANTOCONTRACT
(
"合同号" NVARCHAR2(28) NOT NULL,
"序号" NUMBER(15) NOT NULL,
"备件名称" VARCHAR2(180 BYTE),
"型号规格图号" VARCHAR2(400 BYTE),
"单价" NUMBER(11,3),
"数量" NUMBER(7),
"单位" CHAR(4 BYTE),
"生产厂商" VARCHAR2(80 BYTE),
"交货周期" NUMBER(6,1),
"总价" NUMBER(12,2),
"自动编号" NUMBER(15),
"备注" VARCHAR2(250 BYTE),
ID NUMBER
)
其中ID是的号码是自动增加的,我想做一个TRIGGER,当在插入结束后(插入的字段ID为-1),然后自动更新当前的表,并按照ID记录的顺序(MAX(ID))进行更新.我自己写了个TRIGGER为什么不对呢?
CREATE OR REPLACE TRIGGER beijian.tran_data
AFTER insert ON beijian.plantocontract
FOR EACH ROW
declare
rol_num NUMBER;
begin
select max(id) into rol_num from beijian.plantocontract;
rol_num:=rolnum+1;
update beijian.plantocontract set id=rol_num ;
commit;
end tran_data; 请大侠帮忙看看,小弟初学,谢谢!
另外该表中有1万多条数据,因为是改造表结构,ID字段是后增加的(全是空的)故我想把已有的记录给编上记录号(1,2,3....),如何通过脚本进行操作呢?
CREATE TABLE PLANTOCONTRACT
(
"合同号" NVARCHAR2(28) NOT NULL,
"序号" NUMBER(15) NOT NULL,
"备件名称" VARCHAR2(180 BYTE),
"型号规格图号" VARCHAR2(400 BYTE),
"单价" NUMBER(11,3),
"数量" NUMBER(7),
"单位" CHAR(4 BYTE),
"生产厂商" VARCHAR2(80 BYTE),
"交货周期" NUMBER(6,1),
"总价" NUMBER(12,2),
"自动编号" NUMBER(15),
"备注" VARCHAR2(250 BYTE),
ID NUMBER
)
其中ID是的号码是自动增加的,我想做一个TRIGGER,当在插入结束后(插入的字段ID为-1),然后自动更新当前的表,并按照ID记录的顺序(MAX(ID))进行更新.我自己写了个TRIGGER为什么不对呢?
CREATE OR REPLACE TRIGGER beijian.tran_data
AFTER insert ON beijian.plantocontract
FOR EACH ROW
declare
rol_num NUMBER;
begin
select max(id) into rol_num from beijian.plantocontract;
rol_num:=rolnum+1;
update beijian.plantocontract set id=rol_num ;
commit;
end tran_data; 请大侠帮忙看看,小弟初学,谢谢!
另外该表中有1万多条数据,因为是改造表结构,ID字段是后增加的(全是空的)故我想把已有的记录给编上记录号(1,2,3....),如何通过脚本进行操作呢?
这句没有where 会把表里所有纪录的ID更新成一样的
2.插入的时候直接给id赋值:id_seq.nextval
这样就不会重复了,也不要触发器了,就是有可能id不连续,但是保证唯一
2.插入的时候直接给id赋值:id_seq.nextval
这样就不会重复了,也不要触发器了,就是有可能id不连续,但是保证唯一我也是这么想的
只不过要先把前面1万多条纪录先写上ID ,写个存储过程用游标做一下,很快的