Sql Oracle表单Secuences或Autoincrement或其他选项
我需要把数字2放在公司里,也就是CODCIA,序列是1,2,3,4等等。当放数字4时,序列被重置为1。 我只有一张带有codcia字段的表 我是这样想的:Sql Oracle表单Secuences或Autoincrement或其他选项,sql,oracle,plsql,auto-increment,oracleforms,Sql,Oracle,Plsql,Auto Increment,Oracleforms,我需要把数字2放在公司里,也就是CODCIA,序列是1,2,3,4等等。当放数字4时,序列被重置为1。 我只有一张带有codcia字段的表 我是这样想的: 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
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
你的问题似乎遗漏了很多信息;并不是说你应该发布所有的信息,但过于简单化也无济于事 无论如何:我想说,您可能正在使用
POST-INSERT
触发器和update 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>
看起来你需要在每个CODCIA组重置计数器。您可以有更多的组,如低于2个或大于4个?还是只有2组,2组和4组?请看Row_Number()函数,而不是您编写的函数。