【问题标题】:Oracle Forms Secuences Or Autoincrement or an other optionOracle Forms Secuences 或 Autoincrement 或其他选项
【发布时间】:2018-04-16 18:04:32
【问题描述】:

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

【问题讨论】:

  • 您似乎需要重置每个 CODCIA 组的计数器。您可以有更多的组,例如低于 2 或大于 4 吗?还是只有 2 组,2 组和 4 组?看看 Row_Number() 函数,而不是你写的。

标签: sql oracle plsql auto-increment oracleforms


【解决方案1】:

您的问题似乎缺少很多信息;并不是说您应该发布绝对所有信息,但过于简单化也无济于事。

无论如何:我想说您可能正在使用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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多