Oracle Forms Secuences或Autoincrement或其他选项

时间:2018-04-16 18:04:33

标签: sql oracle plsql auto-increment oracleforms

我需要将数字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

1 个答案:

答案 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>