2015-01-28 1 views
0

workerId 및 prjId를 사용하고 작업자가 프로젝트에서 작업 한 총 시간을 반환하는 PL/SQL 함수 이름 hoursWorked를 작성하려고합니다.동일한 테이블 내에서 합산하기 위해 PL/SQL에서 함수 쓰기

표라는 PROJECTHOURS

WORKERPRJID | WORKERID |  PRJID | TOTHOURS | CDATE 
---------- ---------- ---------- ---------- --------- 
     1   1   1   10 1-JAN-14 
     2   1   1   7 2-JAN-14 
     3   1   1   6 4-JAN-14 
     4   2   1   5 11-JAN-14 
     5   2   1   9 15-JAN-14 
     6   2   1   7 13-JAN-14 
     7   1   2   5 11-JAN-14 
     8   2   2   9 15-JAN-14 
     9   2   2   7 13-JAN-14 

나는 다음과 같은 시도 : 내가 뭐하는 거지에 관한

틀림
CREATE OR replace PROCEDURE Hoursworked (j IN NUMBER, 
             n IN NUMBER) 
IS 
    hours_worked projecthours.tothours%TYPE := 0; 
BEGIN 
    SELECT workerid, 
      prjid, 
      SUM(tothours) 
    INTO hours_worked 
    FROM projecthours 
    WHERE workerid = j 
      AND prjid = n 
    GROUP BY j, 
       n; 

    RETURN hours_worked; 
END; 

SQL> show errors; 
Errors for PROCEDURE HOURSWORKED: 

LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
6/1  PL/SQL: SQL Statement ignored 
6/52  PL/SQL: ORA-00947: not enough values 
12/1  PL/SQL: Statement ignored 
12/1  PLS-00372: In a procedure, RETURN statement cannot contain an 
     expression 

내가 일반적으로 SQL과 매우 경험이다, 그래서 어떤 통찰력은 매우 환영합니다 잘못된.

답변

2

선택이 잘못되었으므로 3 개의 값을 선택하지만 하나만 가져옵니다. 참조에 의한 그룹이 잘못되었습니다.

workerid 또는 프로젝트 ID를 선택할 필요가 없으며 그룹 기준도 필요하지 않습니다. 절차에서

CREATE OR replace PROCEDURE Hoursworked (j IN NUMBER, 
             n IN NUMBER, 
             hours_worked OUT NUMBER) 
IS 

BEGIN 
    SELECT SUM(tothours) 
    INTO hours_worked 
    FROM projecthours 
    WHERE workerid = j 
      AND prjid = n; 

END; 

프로그램의 실행을 종료 즉시 반환 및 매개 변수를 기대하지 않는 등의 아래

은이어야한다. 프로그램 단위 유형을 함수로 변경하거나 위와 같이 OUT 변수를 사용하십시오.

그리고 "J"& "N"팁을위한

+0

정말 감사보다 더 매개 변수 이름을 적어주세요. 함수를로드 할 때 여전히 오류가 발생합니다. 12/5 PLS-00372 : 프로 시저에서 RETURN 문에 표현 을 포함 할 수 없습니다. 그러면 임시 테이블에서 원하는 것을 지정해야한다고 생각합니까? –

+0

@ dan.mi.sun 내 편집을 확인하십시오. 절차에 대한 반품은 필요하지 않습니다. – Sathya

+0

SQL> call Hoursworked (1,1,1); 결과 : ORA-06577 : 바인드 변수가 아닌 출력 매개 변수 이것이 어떻게 호출되는지 명확히 할 수 있습니까? –