Oracle PL/SQL:动态选择更新/合并列

Oracle PL/SQL:动态选择更新/合并列,oracle,dynamic,plsql,merge,Oracle,Dynamic,Plsql,Merge,我有一个表,其中包含与我必须不断更新的几个时刻相关的数据。但是,为了节省空间和时间,表中的每一行都引用给定的一天,该天的每小时和每季度数据分散在同一行的几列中。因此,在更新特定时刻的数据时,我必须选择必须通过PL/SQL过程和函数中的某些编程逻辑更新的列 是否有一种方法可以动态选择更新/合并操作中涉及的一列或多列,而无需每次重新组合查询字符串?性能是一个问题,吞吐量必须很高,所以我不能做任何性能差的事情 编辑:我知道规范化问题。但是,我仍然想知道一种选择要动态和编程地更新/合并的列的好方法。动态

我有一个表,其中包含与我必须不断更新的几个时刻相关的数据。但是,为了节省空间和时间,表中的每一行都引用给定的一天,该天的每小时和每季度数据分散在同一行的几列中。因此,在更新特定时刻的数据时,我必须选择必须通过PL/SQL过程和函数中的某些编程逻辑更新的列

是否有一种方法可以动态选择更新/合并操作中涉及的一列或多列,而无需每次重新组合查询字符串?性能是一个问题,吞吐量必须很高,所以我不能做任何性能差的事情


编辑:我知道规范化问题。但是,我仍然想知道一种选择要动态和编程地更新/合并的列的好方法。

动态选择要用于
DML
语句的列的唯一方法是使用动态SQL。使用动态SQL的唯一方法是生成一个SQL语句,然后可以准备和执行它。当然,您可以以一种或多或少高效的方式组装字符串,您可以潜在地对语句进行一次解析并多次执行,等等,以最大限度地减少使用动态SQL的开销。但是,使用动态SQL(其性能接近于静态SQL)需要做更多的工作


我同意本的观点——这样安排你的表格似乎并没有节省时间。通过正确地规范化表,您可能会获得更好的性能。我不确定您认为节省了多少空间,但我倾向于怀疑表结构的非规范化是否会为您节省很多空间。

所需的一种方法是创建一个包含所有可能更新的包(这些更新没有那么多,因为我在给定时间只更新一个字段)然后根据我的内部逻辑选择要使用的查询。然而,这将导致一个大的if/else或switch/case语句。有没有办法以更好的性能获得类似的结果?

正如您在问题中指出的,您没有节省时间。。。你是否考虑过规范化,你能发布一些表格描述吗?同意-这听起来像是一个规范化问题-得到正确的将使您的其他问题EasiSeri将尝试这种方法现在,并考虑检讨我的数据结构。如果我最终规范了我的表格,重新制定了我的结构,我会让你们知道我的行动方针是什么。谢谢大家!