Oracle:使用给定的数据结构规则验证输入数据

Oracle:使用给定的数据结构规则验证输入数据,oracle,Oracle,我有一个叫做数据规则的表。下面给出了一些解释 Data|GroupNum|GroupType|GroupMinOcc|GroupMaxOcc|DataStatus|DataMinOccWithinGroup|DataMaxOccurenceWithinGroup|IDX ABC |GroupA |Mandatory| 1 | 1 | Mandatory| 1 | 1 |1 DEF

我有一个叫做数据规则的表。下面给出了一些解释

Data|GroupNum|GroupType|GroupMinOcc|GroupMaxOcc|DataStatus|DataMinOccWithinGroup|DataMaxOccurenceWithinGroup|IDX
ABC |GroupA  |Mandatory|  1        |    1      | Mandatory|     1               |       1                   |1
DEF |GroupB  |Mandatory|  1        |    1      |Mandatory |     1               |       1                   |2
GHI |GroupC  |Mandatory|  1        |    1      |Mandatory |     1               |       1                   |3
JKL |GroupD  |Optional |  0        |    1      |Optional  |     0               |       1                   |4
FFF |Group1  |Optional |  0        |    1      |Mandatory |     1               |       1                   |5
RRR |Group1  |Optional |  0        |    1      |Optional  |     0               |       2                   |6
MMM |Group2  |Optional |  0        |    2      |Mandatory |     1               |       1                   |7
PPP |Group2  |Optional |  0        |    2      |Optional  |     0               |       1                   |8
CCC |Group3  |Optional |  0        |    2      |Optional  |     0               |       2                   |9
SSS |Group4  |Mandatory|  1        |    2      |Mandatory  |    1               |       1                   |10
TTT |Group4  |Mandatory|  1        |    2      |Mandatory  |    0               |       2                   |11
让我先解释一下这些数据规则

1) 一个组可以有多个数据记录 如您所见,GroupA只有ABC数据,Group1有FFF和RRR数据

2) 组可以是必需的,也可以是可选的。这意味着如果一个组是强制性的,那么它肯定会出现。其次,如果它是强制性的,那么它的数据记录也具有强制性和可选状态

例如:选中group4 此组是必需的,其第一个数据SSS也是必需的。这意味着此组是强制性的,并且在发生时也应发生此数据。但该组中的第二个数据是TTT,它是可选的。“不管”组是必填的,但此数据在必填组中是可选的,因此它可以出现0到2次 让我们假设这个群体发生两次..看起来是这样的

Group4示例:有效

    SSS
    TTT
    TTT
    SSS
    TTT
无效的Group4事件

SSS
SSS
TTT
TTT
TTT
它无效,因为第二次出现组TTT时发生了3次,但不应超过2次

3) 如果组是可选的,则可以显示或不显示

如您所见,GroupD、Group2和Group3是可选的,所以在GroupC之后,Group4数据也可以直接进入输入数据..如下所示

ABC
DEF
GHI
SSS
TTT
如果输入数据不遵循数据规则表中提到的规则,我只想从数据规则表中各自的组中获取确切的IDX编号

For example 1st Input Data Example

ABC
DEF
GHI
JKL
JKL
SSS
正如您在这里看到的,JKL是可选组中的可选数据。但是如果这个可选组出现,这个JKL应该只出现一次。但它来了两次。所以我想返回IDX号码4

2nd Data Example.

ABC
DEF
GHI
TTT
在这里,它应该返回IDX编号10。因为从强制组4中缺少强制数据SSS,并且在数据规则中其IDX为10

3rd Example

ABC
DEF
GHI
SSS
SSS
TTT
在此情况下,SSS的IDX返回值应为10。因为它发生了两次。正如您在数据规则中所看到的,整个Group4只能重复一次,无论何时发生,SSS都只会出现一次。所以这是一个错误

许多错误也可能同时发生。所以IDX编号只需要从数据规则表中从各自的组数据返回

For example 1st Input Data Example

ABC
DEF
GHI
JKL
JKL
SSS
在输入数据中,只有一列只包含数据记录

注意:组数据将仅以数据规则中所述的自上而下的顺序显示。根据数据规则表中提到的定义,可以显示或不显示

For example 1st Input Data Example

ABC
DEF
GHI
JKL
JKL
SSS

有什么建议吗?

如何实现这一点?

为什么在您的示例中:
Group4示例:Valid-SSS,TTT,TTT,SSS,TTT
此组是有效的,即使它不包含来自强制组的数据:GroupA,GroupB和GroupC?@krokodilko。此组是有效的,因为Group4是强制的,并且必须出现在输入数据中。该组应至少出现一次,最多出现两次,如数据规则表中所述。一旦发生,其数据记录应根据数据规则表中所述的数据定义出现。每一组都是相互独立的。我希望现在天气晴朗。