`

利用动态SQL解决排序问题

    博客分类:
  • db
阅读更多

我们常遇到一个存储过程要做都种排序的情况。通常order by 的条件只有一个固定的,这是远远不够的。需要用一个变量来替换它,而Oracle有不能识别Order by后面的字符串。该怎么办呢?先看看我的一个糟糕方案:
IF myorderby='OBJECTID DESC' then  --按名称排序
OPEN  outcur FOR SELECT *  FROM(
SELECT rownum rowno,t.* FROM (
  SELECT OBJECTID , HITS,POSTTIME FROM CARTOON ORDER BY OBJECTID DESC) t
WHERE rownum<endRow) WHERE rowno>=startRow;

elsif myorderby='HITS DESC' then  --按点击率排序
OPEN  outcur FOR SELECT *  FROM(
SELECT rownum rowno,t.* FROM (
  SELECT OBJECTID , HITS,POSTTIME FROM CARTOON ORDER BY HITS DESC') t
WHERE rownum<endRow) WHERE rowno>=startRow;

else --按时间排序
OPEN  outcur FOR SELECT *  FROM(
SELECT rownum rowno,t.* FROM (
  SELECT OBJECTID , HITS,POSTTIME FROM CARTOON ORDER BY HITS DESC') t
WHERE rownum<endRow) WHERE rowno>=startRow;

END IF;

这虽然是通常使用的两种排序方式得以功过,但显得繁杂而且不够通用。
这时我的同事的好办法:
---------------------------------------------------------------------------
IF (myorderby is not null) then
mysql:='SELECT * FROM( SELECT rownum rowno,t.* FROM (
  SELECT OBJECTID , HITS,POSTTIME  FROM CARTOON ORDER BY '|| myorderby ||
  ') t WHERE rownum<' || endRow || ') WHERE rowno>=' || startRow;
else
mysql:='SELECT * FROM( SELECT rownum rowno,t.* FROM (
  SELECT OBJECTID , HITS,POSTTIME  FROM CARTOON ORDER BY posttime DESC) t
  WHERE rownum<' || endRow || ') WHERE rowno>=' || startRow; 
END IF;

OPEN  outcur FOR mysql;

怎么样,感觉不同凡响吧。希望你能有更好的办法。

分享到:
评论

相关推荐

    JAVA sql 汉字排序

    为了解决这个问题,可以在连接条件上明确指定一个共同的排序规则,例如`collate Chinese_PRC_CI_AI_WS`,这会使得两个表的比较基于同一个字符集和排序规则,从而避免冲突。 排序规则的名称由两部分组成:字符集和...

    浅谈SQL数据库中滥用临时表、排序的解决方案

    在SQL数据库中,临时表和排序是两个常见的操作,但过度依赖它们可能会导致性能问题。本文将探讨如何避免滥用临时表和排序,并提供一个具体的案例来阐述解决方案。 首先,临时表在处理大量数据时可以提供便利,但...

    解决Sqlite中文排序问题(网页)

    本篇文章将深入探讨如何解决SQLite中文排序的问题。 首先,我们需要理解中文字符排序的核心在于Unicode Collation Algorithm(Unicode排序算法)。Unicode是定义全球各种语言字符的标准,而Unicode排序算法提供了...

    sql模糊查询并按匹配度排序

    为了解决这个问题,可以考虑使用全文索引或者对常用查询建立索引等方式来提高查询速度。 - 另外,对于非常大的数据集,可以考虑使用限制返回结果的数量,如`TOP 20`,以减少不必要的数据加载。 4. **安全性考虑**...

    经典的分页、排序SQL 通用存储过程.rar

    综上所述,"经典的分页、排序SQL 通用存储过程"旨在解决数据库查询中的性能挑战,通过创建存储过程实现灵活、高效的分页和排序。这样的存储过程不仅可以应用于MySQL,其他支持存储过程的数据库系统,如SQL Server、...

    SQL疑难解决,问题提高SQL学习使用的效率

    本文将深入探讨SQL的问题解决技巧,提高学习和使用效率。 首先,我们需要理解为什么需要数据库。传统的数据存储方式,如大脑记忆、纸质记录或计算机内存,存在诸多不便,如遗忘、难以保存和查找、易丢失等问题。而...

    Oracle数据库技术——动态SQL

    3. **处理阶段性产生的数据**:例如,当表名是根据用户输入或运行时环境动态生成时,动态SQL提供了一种解决方案,使得可以在运行时指定具体的表名。 #### 二、动态SQL的具体实现方式 动态SQL可以通过两种主要的...

    利用SQL SERVER实现拼音简码自动转换汉字.pdf

    文章的作者姚刚和高勇通过这篇论文,向我们展示了如何利用SQL Server强大而易被忽略的排序规则功能,解决开发中的实际问题,提高了信息管理系统的开发效率。这种技术的应用不仅限于汉字数据处理,在处理其他需要特定...

    SQL常见面试问题集锦

    此问题旨在考察面试者如何处理多表之间的关联以及如何利用子查询来解决实际问题。 **核心知识点:** 1. **子查询的嵌套使用:** - 在 FROM 和 WHERE 子句中嵌套子查询来找到每位员工的经理信息。 - 再次使用子...

    SQL综合利用工具(最好用)

    总的来说,"SQL综合利用工具(最好用)"是一款全面的数据库管理解决方案,旨在简化SQL操作,提高工作效率,同时确保数据的安全和稳定。其1433主机的支持表明它特别适用于SQL Server环境,是数据库管理员、开发人员和...

    sql挂起解决方法,很实用

    针对上述原因,我们可以采取以下策略来解决SQL挂起问题: 1. **优化SQL查询**:仔细检查并优化SQL查询语句,避免使用复杂的子查询、全表扫描和不必要的排序操作。合理利用索引可以显著提高查询性能。 2. **调整...

    易语言利用SQL语句实现超级列表框 带合计行

    谢健提出的解决方案是利用SQL语句来完成这个任务。SQL(结构化查询语言)是用于管理关系数据库的标准语言,它可以方便地进行数据查询、更新、插入和删除等操作。在易语言中,可以通过内建的数据库接口或者第三方库与...

    SQL综合利用工具.rar

    SQL(Structured Query ...总的来说,“SQL综合利用工具.rar”提供的是一套全面的解决方案,旨在帮助IT专业人员更有效地管理和维护他们的SQL数据库系统,提升工作效率,降低出错概率,并确保数据的安全性和一致性。

    sql课件sql课件sql课件

    通过实际案例,将所学知识应用到数据库设计、数据处理和系统维护中,巩固理论知识,提升解决实际问题的能力。 以上就是SQL Server数据库程序设计的核心内容,通过深入学习和实践,你将成为一名熟练的SQL开发者,...

    SQL高级查询语句关键时候解决问题的SQL语句

    根据提供的标题、描述以及部分代码内容,我们可以总结出关于SQL高级查询语句的关键知识点: ### SQL高级查询语句概述 SQL(Structured Query ...希望这些知识点能够帮助你在工作中更加高效地利用SQL来解决问题。

    SQL Server数据库占用过多内存的解决方法

    ### SQL Server数据库占用过多内存的解决方法 #### 内存使用概述 在SQL Server数据库运行过程中,内存管理是一项至关重要的任务。SQL Server会利用内存来提高数据访问速度和查询性能。其中,数据缓存占据内存的...

    免费SQL Server工具的超级指南 解决特定问题或填补SQL Server功能的空缺.pdf

    本文档旨在提供一个详细的免费SQL Server工具清单,这些工具由SQL Server数据库管理员、开发人员以及第三方SQL Server产品厂商开发,用以解决特定的问题或弥补功能上的不足。 首先,DataScripter Add-in for ...

    Leetcode 第N高的薪水.sql

    一个标准的方法是创建一个存储过程或使用一个变量来动态地插入N值,然后利用SQL的排序和分组功能来获取结果。下面是一个使用MySQL语法的示例解决方案,它使用了一个常见的技巧:先将薪水进行去重和排序,然后通过...

    Sql语句收藏 Sql语句收藏

    根据提供的文件信息,我们可以整理出两个SQL查询案例,并对其进行详细解析。这有助于更好地理解SQL语言在实际场景中的...通过理解这些案例,可以更深入地了解SQL语言的强大之处,以及如何有效地利用SQL来解决实际问题。

Global site tag (gtag.js) - Google Analytics