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

时间:2012-03-22 21:36:36

标签: oracle dynamic plsql merge

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

有没有办法动态选择更新/合并操作中涉及的列,而不必每次都重新组装查询字符串?性能是一个问题,吞吐量必须很高,所以我不能做任何表现不佳的事情。

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

2 个答案:

答案 0 :(得分:3)

动态选择用于DML语句的列的唯一方法是使用动态SQL。使用动态SQL的唯一方法是生成一个可以准备和执行的SQL语句。当然,您可以以更高效或更低效的方式组装字符串,您可以对语句进行一次解析并多次执行,等等,以便最大限度地降低使用动态SQL的开销。但是使用与静态SQL相近的动态SQL需要更多的工作。

我赞同Ben的观点 - 看起来你通过这种方式构建表来节省时间似乎并不存在。通过正确地对表进行规范化,您可能会获得更好的性能。我不确定你认为你节省了多少空间,但我倾向于怀疑,如果在空间方面存在任何问题,那么对你的桌面结构进行非规范化将会为你节省很多。

答案 1 :(得分:0)

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