Oracle SQL - 是不是有更有效的方法来组织大量案例语句

Posted

技术标签:

【中文标题】Oracle SQL - 是不是有更有效的方法来组织大量案例语句【英文标题】:Oracle SQL - Is there are more efficient way to organise a massive case statementOracle SQL - 是否有更有效的方法来组织大量案例语句 【发布时间】:2012-06-22 11:09:06 【问题描述】:

目前我有一份查看不同类型文档的报告。每个文件都有一个指定的时间表,它应该在(即 2 天、4 天等)之前完成。有100多种文件。目前,为每个文档分配的时间尺度保存在 Excel 电子表格中,并使用 vlookup 公式(基于评估 ID)与 excel 中的数据相匹配。不幸的是,我们的数据库中没有地方可以放置这个指定的时间刻度,但我希望能够从数据库运行报告并将其发送给用户,而无需在 Excel 中进行这种额外的操作。我知道我可以通过编写大量案例陈述来实现这一点(以下只是一个示例)

SELECT
ID,
CASE WHEN ID = 1 then '1 day' 
WHEN ID = 2 then '42 days'
WHEN ID = 3 then '16 days'
ELSE 'CHECK' end as 'Timescale'
FROM TABLE1

但我确实想知道在 SQL 中是否有更有效的方法来执行此操作(除了请求数据库中的附加字段来记录此内容!)?可能没有,但认为值得一问!谢谢。

【问题讨论】:

“更高效”是什么意思?就执行时间而言,此查询应该非常有效。您可以将其设置为存储过程或存储函数以使其更加高效,但它仍然有一个 case 语句。 当你说there is no place in our database to put this assigned timescale时,是不是意味着你连新表都不能创建? 我们的查询是通过桌面智能运行的,所以我不确定这是否允许我们创建一个新表。 【参考方案1】:

如果您有 100 个不同的时间尺度,那么将 TIMESCALE 表添加到您的数据库中并避免在电子表格中存储对您的业务很重要的信息是合理的。没有什么反对 Excel,优秀的产品,我的一些最好的朋友是 Excel 电子表格 - 但我不会在其中存储关键业务信息。

分享和享受。

【讨论】:

我们的供应商(负责维护数据库)是出了名的缓慢和不灵活。即使请求对数据库进行简单的修复也可能需要几个月的时间(如果我们幸运的话)。这当然是我可以要求的,但与此同时我仍然想生成报告。 鉴于您的“供应商”不愿意提供基本服务,也许是时候调查其他供应商了,让您当前的供应商准确地知道您在做什么以及为什么这样做。这假设他们想要保留您的业务,并且不太可能会因为生气而破坏您的数据。 你假设我有这样做的影响力;)如果只是。【参考方案2】:

所以你想在一个 Oracle 表和一个 Excel 工作表之间连接...

我认为这并非完全不可能。有2种方式。

方式 1. 您可以在 Oracle 中进行连接。这意味着您必须编写一个可以读取 excel 表的 Java 存储过程。下一步是创建用于包装此 Java 存储过程的 PL/SQL 包装器。之后,您可以编写一条通过 PL/SQL 包装器调用 Java 存储过程的 SQL 语句,该 SQL 语句可以与您的 Oracle 表进行连接。

确实,这非常复杂。

方式 2。我认为您可以通过 ODBC 从 Excel 工作表连接到 Oracle。应该可以在 excel 中从 Oracle 获取数据。所以excel可以为你做join。

确实,这非常复杂。

您也可以将这些额外数据放入新的 Timescale 表中(如 Bob Jarvis 建议的那样),但您必须在 excel 表和 Oracle 表之间进行同步。

您还可以将所有数据移至 Oracle。或者,也许您可​​以将所有数据移至 Excel(可能不会)?

【讨论】:

我想你已经回答了我的问题,或者至少提供了不同的可能性。我想虽然我会坚持使用案例陈述并要求我们能够通过供应商将其添加到我们的数据库中。

以上是关于Oracle SQL - 是不是有更有效的方法来组织大量案例语句的主要内容,如果未能解决你的问题,请参考以下文章

是否有更短的方法来更新 Oracle SQL 上的范围值列?

查找每个部门的最高薪水 - 是不是有更有效的查询?

ORA-01843 - 不是有效的月份 oracle SQL

使用 Oracle SQL 在多个列上旋转多个组的最有效方法?

在启动时检查文件是不是存在的有效方法[重复]

Oracle SQL语句性能优化方法大全