首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用参数作为列进行过滤

使用参数作为列进行过滤
EN

Stack Overflow用户
提问于 2019-09-05 11:49:22
回答 1查看 20关注 0票数 0

作为我的标题,我困惑于我是否应该将我的代码从静态重写到DBMS。以下是我的代码

代码语言:javascript
复制
Declare
p_Int number;
p_SchoolId number;
p_Result varchar2;
v_Exist number;
BEGIN
    IF v_Exist = 0 THEN
        SELECT SUM(Students) INTO p_Result
        FROM SCHOOL sch 
        WHERE
            CASE
            WHEN p_SchoolId IS NULL THEN 1
            WHEN sch.SchoolId = p_SchoolId THEN 1
            ELSE 0 END = 1
        AND
            (
            CASE
            WHEN p_ClassId IS NULL THEN 1
            WHEN sch.classid <> p_ClassId THEN 1
            ELSE 0 END = 1
            )
        AND District IN ('NA','YB','NT') ;
    END IF;
END;   

据我所知,在不能使用索引的情况下,最近我有近10.000条记录,但将来可能会达到1000万条以上。

我的问题是:我使用参数作为列来过滤是很好的,有什么方法可以让它更好吗?以及我是否应该从静态重写到DBMS以确保将来的性能(我不会创建任何基于函数的索引)。

我使用的是Oracle-12c。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-09-05 13:06:48

除非我错了,否则你可以像下面这样去掉CASE

代码语言:javascript
复制
SELECT SUM (Students)
  INTO p_Result
  FROM SCHOOL sch
 WHERE     (   sch.schoolid = p_schoolid
            OR p_schoolid IS NULL)
       AND (   sch.classid <> p_classid
            OR p_classid IS NULL)
       AND district IN ('NA', 'YB', 'NT');

看看它是如何运行的,比较解释计划。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57798172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档