如何对查询使用自定义函数

一些家伙

我创建了以下函数,并希望根据“成绩积分”中使用的等级以平均成绩积分查询学生表中的姓名。有任何想法吗?我提供了一条选择语句,将下面的学生,班级和年级表加入其中。

  DECLARE 

FUNCTION GradePoint(GRADE varchar2)
return number
is 
BEGIN
RETURN CASE grade
when 'A+' then 9
when 'A' then 8
when 'A-' then 7
when 'B+' then 6
when 'B' then 5
when 'B-' then 4
when 'C+' then 3
when 'C' then 2
when 'D'then 1
when 'F'then 0
else  -1
END;
END;


SELECT student.student_id, student.first_name, student.last_name, avg(gradepoint(class.grade))
FROM CLASS
JOIN STUDENT
  ON student.student_id = class.student_id
  JOIN course
  ON course.course_id = class.course_id
group by 1;

Belayer

正如@SayanMalakshinov指出的那样,您可以内联函数定义,如果您希望仅在单个查询中使用函数,这非常有用,并且确实需要很多次。但是要使其普遍可用,您必须将其创建为存储过程(过程的泛型)。为此,您必须首先了解PLSQL的块结构。PLSQL过程有2个主要变体:匿名块和命名块。两者最多由3个部分保持一致:声明,执行和异常部分。对于匿名块,声明和异常部分是可选的。然后,整个块以END语句终止。

    declare    -- Declaration section 
               -- contains local definitions
    begin      -- Execution section 
               -- contains the code
    exception  -- Exception Section 
      when ... -- contains code to handle specific exceptions 
      when ... -- that occur within the execution section   
    end;       -- Block terminates 

命名块具有相同的结构,除了还需要声明部分,但它不是以DECLARE开头,而是以FUNCTION或PROCEDURE开头。最后,可以嵌套块:在内部定义一个块,再定义一个块。外部块中定义的任何内容在嵌套块中都可用。在某些限制下,命名块可以嵌套在匿名块中(在声明部分中)。就像匿名块中的任何其他定义一样,当块终止时,命名块的定义也超出了范围。

现在看一下您的代码:

declare
function GradePoint(GRADE varchar2)
   ...
end; 
end;

最后就是您拥有的:一个命名块GradePoint嵌套在一个匿名块中。为了获得一般可用性,请使用编译器指令CREATE替换DECLARE。所以:

create or replace 
function GradePoint(grade varchar2)
   ...
   select ...
        , case ...
          end; 
end GradePoint;

至于您的最终查询,我很困惑您想要的平均值。您的描述暗示了整体分数,但是您的初始查询隐含了每个学生的分数。两种方式的avg函数的窗口版本都将获得正确的值。尝试类似:

select distinct
       s.student_id
     , s.first_name
     , s.last_name
     , round(avg(GradePoint(cl.grade)) over (partition by s.student_id),2) gpa
     , round(avg(GradePoint(cl.grade)) over (),2)  overall_gpa
  from student s 
  join class   cl on cl.student_id = s.student_id
  join course  c  on c.course_id = cl.course_id 
 order by s.student_id;

旁注:您应避免使用CamelCase名称。Oracle在内部将它们转换为大写(所有对象类型表,列,视图,过程、、、、所有命名对象。它进行的任何引用都使用大写的值。因此,GradePoint将始终显示为GRADEPOINT。在Oracle中最好使用Snake_Case约定,是的,它也将是大写字母,但仍易于阅读,这意味着更多的理解和更少的错误,尤其是当项目紧密命名时。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用 ADO 在 Excel 自定义函数中查询访问数据库

来自分类Dev

如何在自定义jQuery函数中使用函数

来自分类Dev

如何在自定义jQuery函数内使用函数

来自分类Dev

如何使用枢轴查询使用自定义显示

来自分类Dev

CakePHP ::如何使用自定义SQL查询创建Dropdown

来自分类Dev

如何使用Restangular调用自定义查询URL?

来自分类Dev

如何使用Strapi在GraphQL中添加自定义查询?

来自分类Dev

CakePHP ::如何使用自定义SQL查询创建Dropdown

来自分类Dev

如何使用高级自定义字段查询帖子?

来自分类Dev

如何使用自定义查询方法扩展水线?

来自分类Dev

如何使用查询 findByClassLiteral 构建自定义 MongoRepository

来自分类Dev

如何使用Kotlin创建自定义视图的构造函数

来自分类Dev

如何使用自定义函数Twig-symfony

来自分类Dev

如何使用自定义参数创建函数

来自分类Dev

如何使用自定义参数创建函数

来自分类Dev

如何在此代码中使用自定义函数?

来自分类Dev

如何使用jQuery的droppble函数添加自定义DIV?

来自分类Dev

如何使用C ++代码调用Matlab自定义函数

来自分类Dev

如何使用自定义weither函数缓冲发射

来自分类Dev

如何创建Django自定义查询?

来自分类Dev

如何使用功能评分查询更新不赞成使用的自定义评分查询?

来自分类Dev

如何使用查询方法在 JPA 中使用自定义查询(spring boot)

来自分类Dev

如何自定义内置的javascript函数?

来自分类Dev

检查使用自定义函数的约束

来自分类Dev

Pyspark 使用自定义函数

来自分类Dev

在 ddply 中使用自定义函数

来自分类Dev

在 tidyverse 中使用自定义函数

来自分类Dev

如何在OrientDB中的自定义javascript函数中从JSON提取查询结果

来自分类Dev

猫鼬:使用自定义函数在查询/汇总中转换值

Related 相关文章

  1. 1

    如何使用 ADO 在 Excel 自定义函数中查询访问数据库

  2. 2

    如何在自定义jQuery函数中使用函数

  3. 3

    如何在自定义jQuery函数内使用函数

  4. 4

    如何使用枢轴查询使用自定义显示

  5. 5

    CakePHP ::如何使用自定义SQL查询创建Dropdown

  6. 6

    如何使用Restangular调用自定义查询URL?

  7. 7

    如何使用Strapi在GraphQL中添加自定义查询?

  8. 8

    CakePHP ::如何使用自定义SQL查询创建Dropdown

  9. 9

    如何使用高级自定义字段查询帖子?

  10. 10

    如何使用自定义查询方法扩展水线?

  11. 11

    如何使用查询 findByClassLiteral 构建自定义 MongoRepository

  12. 12

    如何使用Kotlin创建自定义视图的构造函数

  13. 13

    如何使用自定义函数Twig-symfony

  14. 14

    如何使用自定义参数创建函数

  15. 15

    如何使用自定义参数创建函数

  16. 16

    如何在此代码中使用自定义函数?

  17. 17

    如何使用jQuery的droppble函数添加自定义DIV?

  18. 18

    如何使用C ++代码调用Matlab自定义函数

  19. 19

    如何使用自定义weither函数缓冲发射

  20. 20

    如何创建Django自定义查询?

  21. 21

    如何使用功能评分查询更新不赞成使用的自定义评分查询?

  22. 22

    如何使用查询方法在 JPA 中使用自定义查询(spring boot)

  23. 23

    如何自定义内置的javascript函数?

  24. 24

    检查使用自定义函数的约束

  25. 25

    Pyspark 使用自定义函数

  26. 26

    在 ddply 中使用自定义函数

  27. 27

    在 tidyverse 中使用自定义函数

  28. 28

    如何在OrientDB中的自定义javascript函数中从JSON提取查询结果

  29. 29

    猫鼬:使用自定义函数在查询/汇总中转换值

热门标签

归档