一起使用 SQL 和 Pearl - 哪一个应该用于常用功能?

2024-03-07

我没有发现这个问题的任何重复,但如果有一个或多个,我很抱歉 - 请用链接发表评论。

这个问题很基本,答案也可能是这样。如果我使用 Perl 来执行数据库并对其进行操作,那么当涉及共享函数时,我应该将负担放在哪个途径(Perl 与 SQL)上?

功能如下 -LEN, IF/ELSE, CONCAT还有更多功能以及算术功能等对于两个系统都是通用的。

该 SQL 语句加载了 case 块和其他可以用 Perl 复制的操作。那么,如果同样的逻辑可以用 Perl 实现,是否值得重写呢?哪些条件会影响将一个系统的负担转移到另一个系统上的决定?

SELECT DISTINCT     s.id stu_id,
                    stu_id.fullname stu_name,
                    p.major1 major,
                    p.minor1 minor,
                    s.reg_hrs,
                    NVL(st.cum_earn_hrs,0) ttl_hrs,
                    p.adv_id curr_adv_id,
                    adv_id.fullname curr_adv_name,
                    CASE    WHEN    (p.adv_id <> 35808 AND p.major1 = 'NS')                 THEN    (1165)
                            WHEN    (p.adv_id = 35808 AND p.major1 = 'NS')                  THEN    (35808)
                            WHEN    (p.adv_id = 9179 AND p.major1 = 'DART')                 THEN    (9179)
                            WHEN    (p.minor1 IN ('RT','RESP') AND st.cum_earn_hrs >= 24)   THEN    (70897)
                            WHEN    (p.major1 IN ('CDSC','CDSD'))                           THEN    (52125)
                            WHEN    (p.major1 IN ('CA','CB'))                               THEN    (24702)
                            WHEN    (p.minor1 = 'NURS')                                     THEN    (51569)
                            WHEN    (p.major1 = 'LEG')                                      THEN    (13324)
                            WHEN    (p.major1 = 'CC')                                       THEN    (73837)
                            WHEN    (p.major1 = 'CCRE')                                     THEN    (1133)
                            WHEN    ((p.adv_id IN (SELECT DISTINCT id FROM fac_rec WHERE stat = 'I'))
                                    OR (st.cum_earn_hrs < 24 AND (p.adv_id||p.major1) IN (SELECT DISTINCT (id||major) FROM adv_detail WHERE stat = 'A' AND max_stu > 0 AND min_hrs >= 24))
                                    OR (s.id NOT IN (SELECT DISTINCT stu.id FROM stu_acad_rec stu, sess_info si WHERE stu.yr = si.prev_yr AND stu.sess = si.prev_sess AND stu.reg_hrs > 0 AND stu.reg_stat IN ('C','R') AND stu.prog = 'UNDG'))
                                    OR ((p.adv_id||p.major1) IN (SELECT DISTINCT (id||major) FROM adv_detail WHERE stat <> 'A' OR max_stu <= 0))
                                    OR ((p.adv_id||p.major1) NOT IN (SELECT DISTINCT (id||major) FROM adv_detail WHERE stat = 'A' AND max_stu > 0)))
                            THEN    (9238)
                            ELSE    (p.adv_id)
                    END     new_adv_id,
                    CASE    WHEN    (p.adv_id <> 35808 AND p.major1 = 'NS')                 THEN    ('Deborah')
                            WHEN    (p.adv_id = 35808 AND p.major1 = 'NS')                  THEN    ('Veronica')
                            WHEN    (p.adv_id = 9179 AND p.major1 = 'DART')                 THEN    ('Stella')
                            WHEN    (p.minor1 IN ('RT','RESP') AND st.cum_earn_hrs >= 24)   THEN    ('Lisa')
                            WHEN    (p.major1 IN ('CDSC','CDSD'))                           THEN    ('Joanne')
                            WHEN    (p.major1 IN ('CA','CB'))                               THEN    ('Barbara')
                            WHEN    (p.minor1 = 'NURS')                                     THEN    ('Karen')
                            WHEN    (p.major1 = 'LEG')                                      THEN    ('Nancy')
                            WHEN    (p.major1 = 'CC')                                       THEN    ('Alberta')
                            WHEN    (p.major1 = 'CCRE')                                     THEN    ('Naomi')
                            WHEN    ((p.adv_id IN (SELECT DISTINCT id FROM fac_rec WHERE stat = 'I'))
                                    OR (st.cum_earn_hrs < 24 AND (p.adv_id||p.major1) IN (SELECT DISTINCT (id||major) FROM adv_detail WHERE stat = 'A' AND max_stu > 0 AND min_hrs >= 24))
                                    OR (s.id NOT IN (SELECT DISTINCT stu.id FROM stu_acad_rec stu, sess_info si WHERE stu.yr = si.prev_yr AND stu.sess = si.prev_sess AND stu.reg_hrs > 0 AND stu.reg_stat IN ('C','R') AND stu.prog = 'UNDG'))
                                    OR ((p.adv_id||p.major1) IN (SELECT DISTINCT (id||major) FROM adv_detail WHERE stat <> 'A' OR max_stu <= 0))
                                    OR ((p.adv_id||p.major1) NOT IN (SELECT DISTINCT (id||major) FROM adv_detail WHERE stat = 'A' AND max_stu > 0)))
                            THEN    ('Staff')
                            ELSE    (adv_id.fullname)
                    END     new_adv_name,
                    CASE    WHEN    (p.adv_id <> 35808 AND p.major1 = 'NS')                 THEN    ('NS majors not assigned to Veronica go to Debbie')
                            WHEN    (p.adv_id = 35808 AND p.major1 = 'NS')                  THEN    ('NS majors stay with Veronica')
                            WHEN    (p.adv_id = 9179 AND p.major1 = 'DART')                 THEN    ('DART majors stay with Stella')
                            WHEN    (p.minor1 IN ('RT','RESP') AND st.cum_earn_hrs >= 24)   THEN    ('RT-RESP minors go to Lisa')
                            WHEN    (p.major1 IN ('CDSC','CDSD'))                           THEN    ('CDSC-CDSD majors go to Joanne')
                            WHEN    (p.major1 IN ('CA','CB'))                               THEN    ('CA-CB majors go to Barbara')
                            WHEN    (p.minor1 = 'NURS')                                     THEN    ('NURS minors go to Karen')
                            WHEN    (p.major1 = 'LEG')                                      THEN    ('LEG majors go to Nancy')
                            WHEN    (p.major1 = 'CC')                                       THEN    ('CC majors go to Alberta')
                            WHEN    (p.major1 = 'CCRE')                                     THEN    ('CCRE majors go to Naomi')
                            WHEN    (p.adv_id IN (SELECT DISTINCT id FROM fac_rec WHERE stat = 'I'))
                            THEN    ('Current advisor is inactive')
                            WHEN    (st.cum_earn_hrs < 24 AND (p.adv_id||p.major1) IN (SELECT DISTINCT (id||major) FROM adv_detail WHERE stat = 'A' AND max_stu > 0 AND min_hrs >= 24))
                            THEN    ('Total credits for this student did not meet the advisor reqs for this major')
                            WHEN    (s.id NOT IN (SELECT DISTINCT stu.id FROM stu_acad_rec stu, sess_info si WHERE stu.yr = si.prev_yr AND stu.sess = si.prev_sess AND stu.reg_hrs > 0 AND stu.reg_stat IN ('C','R') AND stu.prog = 'UNDG'))
                            THEN    ('This student did not attend '||si.prev_sess||si.prev_yr)
                            WHEN    ((p.adv_id||p.major1) IN (SELECT DISTINCT (id||major) FROM adv_detail WHERE (stat <> 'A' OR max_stu <= 0)))
                            THEN    ('Current advisor is not advising students with this major')
                            WHEN    ((p.adv_id||p.major1) NOT IN (SELECT DISTINCT (id||major) FROM adv_detail WHERE stat = 'A' AND max_stu > 0))
                            THEN    ('Current advisor is not advising students with this major')
                            ELSE    ('Student will stay with current advisor')
                    END     change_comm
FROM                stu_acad_rec s,
                    prog_enr_rec p,
                    OUTER stu_stat_rec st,
                    id_rec stu_id,
                    id_rec adv_id,
                    sess_info si
WHERE               s.id = p.id
                    AND s.id = st.id
                    AND s.id = stu_id.id
                    AND p.adv_id = adv_id.id
                    AND s.yr = si.curr_yr
                    AND s.sess = si.curr_sess
                    AND s.reg_hrs > 0
                    AND s.reg_stat IN ('C','R')
                    AND s.prog = 'UNDG'
                    AND p.prog = 'UNDG'
                    AND st.prog = 'UNDG'
                    AND s.id NOT IN (3,287,9238,59999) {System test use IDs}
INTO TEMP           stu_list
WITH NO LOG;

我会从性能角度和重用角度来看待这个问题。

如果您在两侧都尝试,您可能会发现一侧比另一侧快得多 - 这将是一个很好的指标来选择哪一个。

如果您要在多个地方重复使用某个查询,那么您会希望尽可能地将大部分业务逻辑合并到查询中,这样您就不需要在 GUI 中复制它。

(我不得不说,虽然严格来说不是您问题的一部分,但大部分案例逻辑看起来您可以在模式中做一个好的模型,并用与某些关联表的正常连接替换案例)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一起使用 SQL 和 Pearl - 哪一个应该用于常用功能? 的相关文章

随机推荐

  • 如何获取执行的.jar文件的路径?

    在 Java 中如何获取已执行的 jar 文件的路径 我尝试使用System getProperty user dir 但这只给了我当前的工作目录 这是错误的 我需要 jar 文件直接位于的目录路径 而不是 pwd 您能具体说明为什么需要该
  • 一种用于膨胀/收缩(偏移、缓冲)多边形的算法

    我如何 膨胀 多边形 也就是说 我想做类似的事情 要求是新 膨胀 多边形的边 点与旧 原始 多边形的边 点都处于相同的恒定距离 在示例图片上它们不是 因为那时它必须使用弧来膨胀顶点 但是让我们暂时忘记这一点 我正在寻找的数学术语实际上是向内
  • Vue cli 3 在构建后执行一些任务

    我在用vue cli 3这是我的vue config js const path require path const webpack require webpack const publicDir public const isProdu
  • Three.js 中“THREE.OrbitControls”中的相机位置发生变化

    The THREE OrbitControls当加载初始相机位置时工作正常 但是当使用按钮单击更改相机位置和相机旋转时 相机的位置发生变化 但是单击画布在新视图上旋转相机时 相机的位置突然发生变化 Camera Camera new THR
  • 将 SID 存储在变量中

    我需要一种方法将当前用户的 SID 存储在变量中 我尝试了很多变体 setlocal enableextensions for f tokens a in wmic path win32 useraccount where name Use
  • Web API 中的每个请求 DependencyResolver

    在 MVC 中 一个ModelValidatorProvider被实例化并调用以验证每个请求的模型 这意味着在 DI 环境中 它可以依赖于单个请求范围内的对象 例如工作单元或数据库上下文 在 Web API 中 这似乎已经发生了重大变化 不
  • 需要哪种算法来做到这一点?

    我有这种形式的数据 对于 x 1 y 是 1 4 6 7 9 18 16 19 之一 对于 x 2 y 是 1 5 7 4 之一 对于 x 3 y 是 2 6 4 8 2 之一 对于 x 100 y 是 2 7 89 4 5 之一 每组中只
  • 断言 __init__ 是用正确的参数调用的

    我使用 python 模拟来断言特定对象是使用正确的参数创建的 这就是我的代码的样子 class Installer def init foo bar version Init stuff pass def enter self retur
  • Spring MVC 请求中断钩子

    spring mvc 中是否有注释或其他内容可以让我在客户端关闭连接或以任何方式取消请求时立即调用某些内容 我得到了一个休息服务 通常非常快 但可能取决于用户输入几秒钟 我想在客户端断开连接后立即取消服务器端的处理 我可以实现客户端必须不时
  • 使两个不同长度的向量长度相等

    我有两个不同长度的向量 我怎样才能开始这两个系列 让它们的结局重合 x lt c 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 y lt c 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3
  • 将 Rails + Puma + Postgres 应用程序部署到 Elastic beanstalk 的正确方法是什么?

    我有一个 Rails 5 API 我正在尝试在 Elastic Beanstalk 上 正确地 部署它 这是我的初始config puma rb我使用的文件 threads count ENV fetch RAILS MAX THREADS
  • Ruby Sinatra Hello World `remove_const' 中出现错误:常量 URI::WFKV_ 未定义(NameError)

    只是想让简单的http服务器运行并且对ruby一无所知 usr local lib ruby gems 1 9 1 gems rack 1 3 5 lib rack backports uri common 192 rb 53 in rem
  • Mac 上使用 Komodo 的 Python 宏

    我正在使用 Komodo IDE 版本 6 1 1 内部版本 61234 平台 macosx x86 我还使用 Python 3 2 和 Python 2 7 我有just转而使用 我的第一台 Mac 操作系统版本10 6 在我的 Wind
  • 将序列化的 protobuf 输出转换为 python 字典

    给定一个字符串格式的序列化 protobuf 协议缓冲区 输出 我想把它转换成Python字典 假设这是序列化的 protobuf 以 python 字符串形式给出 person info name John age 20 website
  • 通过括号之间的逗号对字符串进行分组

    响应 正则表达式查找两个字符之间包含的字符串 同时排除分隔符 https stackoverflow com questions 1454913 regular expression to find a string included be
  • 可以将一个按钮覆盖在另一个按钮之上吗?

    我试图将一种按钮覆盖在另一个按钮之上 原因是我想向用户解释某些按钮的作用 例如 会有一个按钮 在该按钮的右上角或其他位置会有一个问号 当用户按下问号时 它会解释该按钮的作用 想到的就是这个 试试吧
  • int LA[] = {1,2,3,4,5} c 中的内存分配混乱

    我观察到为数组分配的内存似乎是动态的 这是我在此找到的示例代码tutorial https www tutorialspoint com data structures algorithms array data structure htm
  • jquery 取消悬停

    我有这个脚本可以在段落内的链接悬停时在段落上显示背景颜色 我不知道该怎么做是在我 取消悬停 后使其返回到原始背景颜色 function box a hover function this parent css background colo
  • 获取最新发布的 YouTube 视频 URL

    我希望有人能够帮助我解决我遇到的问题 目前在我们的网站上 我们有这个页面 http driftgames life instagram http driftgames life instagram 我们使用它作为 Instagram 生物链
  • 一起使用 SQL 和 Pearl - 哪一个应该用于常用功能?

    我没有发现这个问题的任何重复 但如果有一个或多个 我很抱歉 请用链接发表评论 这个问题很基本 答案也可能是这样 如果我使用 Perl 来执行数据库并对其进行操作 那么当涉及共享函数时 我应该将负担放在哪个途径 Perl 与 SQL 上 功能