쿼리에 사용자 지정 함수를 사용하는 방법

어떤 친구

다음 함수를 만들었으며 Gradepoint에서 사용 된 척도를 기반으로 한 평균 점수로 학생 테이블의 이름을 쿼리하고 싶습니다. 어떤 아이디어? 아래에 내 학생, 수업 및 성적표를 결합하는 선택 진술을 제공했습니다.

  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 프로 시저에는 익명 블록과 명명 된 블록의 두 가지 주요 변형이 있습니다. 둘 다 최대 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가 익명 블록에 중첩됩니다. 일반 가용성을 위해 DECLARE를 컴파일러 지시문 CREATE로 대체하십시오. 그래서:

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 사용자 지정 함수에서 액세스 DB를 쿼리하는 방법

분류에서Dev

Cakephp 1.3에서 쿼리를 사용자 지정하는 방법

분류에서Dev

사용자 지정 jQuery 함수 내에서 함수를 사용하는 방법

분류에서Dev

MySQL 쿼리에서 사용자 지정 ORDER BY를 정의하는 방법

분류에서Dev

사용자 정의 함수를 사용하지 않고 SQL에서 동적으로 쿼리를 실행할 수있는 방법이 있습니까?

분류에서Dev

사용자 지정 CSS에 Bootstrap3 미디어 쿼리를 사용하는 방법은 무엇입니까?

분류에서Dev

사용자 지정 컨트롤에 함수를 전달하는 방법

분류에서Dev

극작가에서 사용자 지정 js 함수를 실행하는 방법

분류에서Dev

피벗 쿼리를 사용하여 사용자 지정 디스플레이를 사용하는 방법

분류에서Dev

django-특정 쿼리에 대한 사용자 지정 관리자를 피하는 방법

분류에서Dev

Zend Framework 2를 사용하여 Doctrine 2에서 사용자 지정 DQL 함수를 추가하는 방법

분류에서Dev

PowerShell 빌드 단계 내에서 TFS 빌드 정의 사용자 지정 변수를 쿼리하는 방법

분류에서Dev

사용자 지정 CursorAdapter와 함께 ListView에서 EndlessAdapter를 사용하는 방법

분류에서Dev

한 사용자 정의 모듈의 함수를 다른 사용자 정의 모듈에 사용하는 방법

분류에서Dev

자바 스크립트에서 함수를 사용자 지정 함수에 인수로 전달하는 방법

분류에서Dev

집계 함수 내에서 사용자 지정 논리를 적용하는 방법

분류에서Dev

r- dplyr을 사용하는 사용자 지정 함수에서 반복을 사용하는 방법

분류에서Dev

groupingBy 작업에서 사용자 지정 수집기를 사용하는 방법

분류에서Dev

asp.net에서 볼 수 있도록 사용자 지정 쿼리 결과를 전달하는 방법

분류에서Dev

Laravel에서 사용자 지정 인증 쿼리를 만드는 방법

분류에서Dev

PostgreSQL 테이블에서 사용자 지정 함수를 열 기본값으로 사용하는 방법

분류에서Dev

R의 data.table에서 사용자 지정 함수를 사용하는 방법

분류에서Dev

Tableau의 Script_Real ()에서 사용자 지정 R 함수를 사용하는 방법은 무엇입니까?

분류에서Dev

감사 테이블 최대 절전 모드에서 사용자 지정 쿼리를 실행하는 방법

분류에서Dev

SQL 함수에서 SQL 쿼리를 사용하는 방법

분류에서Dev

Hibernate Criteria 쿼리에서 MySQL 함수를 사용하는 방법

분류에서Dev

R의 사용자 정의 함수에 벡터를 적용하는 방법

분류에서Dev

더 이상 사용되지 않는 표현식 내에서 사용자 변수를 설정하지 않고이 쿼리를 다시 작성하는 방법

분류에서Dev

SQL 쿼리에서 사용자 지정 정렬 순서를 추가하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    ADO를 사용하여 Excel 사용자 지정 함수에서 액세스 DB를 쿼리하는 방법

  2. 2

    Cakephp 1.3에서 쿼리를 사용자 지정하는 방법

  3. 3

    사용자 지정 jQuery 함수 내에서 함수를 사용하는 방법

  4. 4

    MySQL 쿼리에서 사용자 지정 ORDER BY를 정의하는 방법

  5. 5

    사용자 정의 함수를 사용하지 않고 SQL에서 동적으로 쿼리를 실행할 수있는 방법이 있습니까?

  6. 6

    사용자 지정 CSS에 Bootstrap3 미디어 쿼리를 사용하는 방법은 무엇입니까?

  7. 7

    사용자 지정 컨트롤에 함수를 전달하는 방법

  8. 8

    극작가에서 사용자 지정 js 함수를 실행하는 방법

  9. 9

    피벗 쿼리를 사용하여 사용자 지정 디스플레이를 사용하는 방법

  10. 10

    django-특정 쿼리에 대한 사용자 지정 관리자를 피하는 방법

  11. 11

    Zend Framework 2를 사용하여 Doctrine 2에서 사용자 지정 DQL 함수를 추가하는 방법

  12. 12

    PowerShell 빌드 단계 내에서 TFS 빌드 정의 사용자 지정 변수를 쿼리하는 방법

  13. 13

    사용자 지정 CursorAdapter와 함께 ListView에서 EndlessAdapter를 사용하는 방법

  14. 14

    한 사용자 정의 모듈의 함수를 다른 사용자 정의 모듈에 사용하는 방법

  15. 15

    자바 스크립트에서 함수를 사용자 지정 함수에 인수로 전달하는 방법

  16. 16

    집계 함수 내에서 사용자 지정 논리를 적용하는 방법

  17. 17

    r- dplyr을 사용하는 사용자 지정 함수에서 반복을 사용하는 방법

  18. 18

    groupingBy 작업에서 사용자 지정 수집기를 사용하는 방법

  19. 19

    asp.net에서 볼 수 있도록 사용자 지정 쿼리 결과를 전달하는 방법

  20. 20

    Laravel에서 사용자 지정 인증 쿼리를 만드는 방법

  21. 21

    PostgreSQL 테이블에서 사용자 지정 함수를 열 기본값으로 사용하는 방법

  22. 22

    R의 data.table에서 사용자 지정 함수를 사용하는 방법

  23. 23

    Tableau의 Script_Real ()에서 사용자 지정 R 함수를 사용하는 방법은 무엇입니까?

  24. 24

    감사 테이블 최대 절전 모드에서 사용자 지정 쿼리를 실행하는 방법

  25. 25

    SQL 함수에서 SQL 쿼리를 사용하는 방법

  26. 26

    Hibernate Criteria 쿼리에서 MySQL 함수를 사용하는 방법

  27. 27

    R의 사용자 정의 함수에 벡터를 적용하는 방법

  28. 28

    더 이상 사용되지 않는 표현식 내에서 사용자 변수를 설정하지 않고이 쿼리를 다시 작성하는 방법

  29. 29

    SQL 쿼리에서 사용자 지정 정렬 순서를 추가하는 방법은 무엇입니까?

뜨겁다태그

보관