Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Oracle中创建一个包含列的视图,该列的内容取决于相关实体的组合值?_Java_Sql_Oracle_Select_Plsql - Fatal编程技术网

Java 如何在Oracle中创建一个包含列的视图,该列的内容取决于相关实体的组合值?

Java 如何在Oracle中创建一个包含列的视图,该列的内容取决于相关实体的组合值?,java,sql,oracle,select,plsql,Java,Sql,Oracle,Select,Plsql,在基于Oracle SQL数据库的Java应用程序中,我需要解决以下问题: 实体数据传递可以由任意数量的数据包组成。 数据包具有PacketStatus和外键datadeliveryid PacketStatus是具有以下值的枚举: 0, processed 1, processing 2, error 3, waiting 该数值存储在表PACKET中的PacketStatus列中 在我的视图中,我希望将DataDelivery显示为表行,包括一列,该列显示所有相关数据包的组合状态。数据包的

在基于Oracle SQL数据库的Java应用程序中,我需要解决以下问题:

实体数据传递可以由任意数量的数据包组成。 数据包具有PacketStatus和外键datadeliveryid

PacketStatus是具有以下值的枚举:

0, processed
1, processing
2, error
3, waiting
该数值存储在表PACKET中的PacketStatus列中

在我的视图中,我希望将DataDelivery显示为表行,包括一列,该列显示所有相关数据包的组合状态。数据包的组合状态应根据以下逻辑确定:

如果与数据传递相关的任何一个数据包的状态为“错误”:视图列应显示“错误”

如果与数据传递相关的任何一个数据包的状态为“等待”:视图列应显示“等待”

如果与数据传递相关的所有数据包的状态为“已处理”:视图列应显示“已处理”

如果与数据传递相关的所有数据包的状态为“正在处理”:视图列应显示“正在处理”

如果与数据传递相关的所有数据包的状态为“已处理”或“正在处理”:视图列应显示“正在处理”

在所有其他情况下,视图列应显示:“错误”。

计数忽略空值。您可以使用这个事实对case表达式执行计数,以统计处于哪个状态的数据包的数量。从那时起,就需要将所有东西与箱子粘在一起:

选择dd.*,状态 从数据交付dd 加入选择dataDeliveryId, 计数时的案例案例状态为2时1结束>0时,则为“错误” 当COUNTCASE状态为3时1结束>0时,则为“等待” 当COUNTCASE状态为0时,则1结束=计数*然后为“已处理” 当COUNTCASE状态为1时,则1结束=计数*然后为“处理” 否则“错误”结束为状态 从数据包 在dd.dataDeliveryId=p.dataDeliveryId上按dataDeliveryId p分组
谢谢你的回答,它马上就起作用了。我认为可能有一个更简单的解决方案,比如虚拟列,或者在实体DataDelivery中使用@Formula注释,而不是创建一个涉及代码中许多其他更改的视图。你认为值得调查吗?