我需要将数字2放在CODCIA公司中,序列是1,2,3,4等,当输入数字4时,序列重置为1。 我只有一张带有鳕鱼场的桌子。
我这样做:
CODCIA NRODOCTO
------ --------
2 1
2 2
2 3
4 4
4 5
4 6
使用此代码:
IF (:E.NRODOCTO in (2)) then
BEGIN
SELECT NVL(MAX(NRODOCTO),1200)+1
INTO :E.NRODOCTO
FROM PS91;
EXCEPTION WHEN OTHERS THEN :E.NRODOCTO := 1200;
END;
END IF;
我需要这个:
CODCIA NRODOCTO
------ --------
2 1
2 2
2 3
4 1
4 2
4 3
答案 0 :(得分:0)
你的问题似乎缺少很多信息;并不是说您应该发布绝对所有信息,但过度简化它也无济于事。
无论如何:我说你可能正在使用POST-INSERT
触发器并更新NRODOCTO列值,因为 - 在表单中执行此操作需要循环遍历整个块,注意CODCIA项值并递增适当的NRODOCTO值,并为所有不同的CODCIA值执行此操作。由于没有人阻止用户输入混合的CODCIA值,因此有些无聊。
这是一个基于SQL * Plus的示例(因为我不打算为它创建表单)。 PS91表很可能看起来不那么简单(重读我的第一句话),但这就是你告诉我们的内容。
SQL> create table ps91 (codcia) as
2 (select 2 from dual union all
3 select 2 from dual union all
4 select 2 from dual union all
5 --
6 select 4 from dual union all
7 select 4 from dual
8 );
Table created.
SQL> alter table ps91 add nrodocto number;
Table altered.
SQL> -- POST-INSERT form trigger
SQL> merge into ps91 p
2 using (select rowid rid, row_number() over (partition by codcia order by null) rn
3 from ps91
4 ) x
5 on (p.rowid = x.rid)
6 when matched then update set p.nrodocto = x.rn;
5 rows merged.
SQL> select * from ps91
2 order by codcia, nrodocto;
CODCIA NRODOCTO
---------- ----------
2 1
2 2
2 3
4 1
4 2
SQL>