如何仅在 SQL 中解码第一行
Posted
技术标签:
【中文标题】如何仅在 SQL 中解码第一行【英文标题】:How to Decode First Row Only in SQL 【发布时间】:2019-06-27 06:57:44 【问题描述】:我有以下 SQL
Select decode(:lang_no, 1 , Local_Name , 2 , foreign_Name) Name from Table_Name;
最后一条SQL检索大约几十万条记录,解码拖慢了检索速度,因为:Lang_no是一个参数(所有记录都一样)我想在这里告诉优化器解码第一行only , 所以如果:lang_no =1
不检查其他记录,直接返回Local_Name
,以此类推。
那么,是否有任何 Oracle 提示或其他调整想法可以提供帮助?
【问题讨论】:
你能告诉我们更多关于表、键、数据以及你如何实际使用这个查询的信息吗?解码速度不慢,几十万条记录也不算多。 你怎么知道是解码减慢了查询速度?我怀疑您实际上可以衡量该表达式的性能。 Oracle 不提供 动态投影,即 SQL 查询中的动态列名。您可以使用动态 SQL 来处理此类情况。 【参考方案1】:您也许可以使用CASE
表达式?
Select CASE
WHEN :lang_no = 1 THEN decode(:lang_no, 1 , Local_Name , 2 , foreign_Name)
ELSE LocalName
END Name
from Table_Name;
【讨论】:
以上是关于如何仅在 SQL 中解码第一行的主要内容,如果未能解决你的问题,请参考以下文章