2016-10-11 2 views
0

편집 : 이제 코드를 변경했습니다.Oracle iSQL 함수 문제

나는 내 함수에 문제가있다. 나는 함수를 만들 때 오류가 없으며 아무 문제없이 만든 함수의 기본 버전을 실행할 수 있지만 전체 함수를 호출 할 때 빈 행을 얻는다.

이 버전

SELECT SUM(t.estimated_hours*c.hrly_charge_rate) 
FROM  task t, task_history ta, task_type tt, charge_grade c 
WHERE t.task_id = ta.task_id 
AND  tt.task_type_no = t.task_type_no 
AND  c.grade_no = tt.grade_no 
AND  ta.task_history_id = 1; 

을 작동하지만이 행은 단지 빈 작동하지 않음 ???

SHOW ERRORS 

CREATE OR REPLACE FUNCTION total_cost (tn task.task_id%TYPE) 
RETURN NUMBER IS 

    cost_var NUMBER; 

BEGIN 
    SELECT SUM(t.estimated_hours*c.hrly_charge_rate) 
    INTO  cost_var 
    FROM  task t, task_history ta, task_type tt, charge_grade c 
    WHERE t.task_id = ta.task_id 
    AND  tt.task_type_no = t.task_type_no 
    AND  c.grade_no = tt.grade_no 
    AND  t.task_type_no = tn 
    AND  ta.task_history_id = 1; 

    RETURN cost_var; 

END; 
/

-- my call select statment 


SELECT total_cost(t.task_id) AS task_cost 
FROM task t; 

오류없이 실행되지만 행은 모두 비어 있습니까? 내가 잘못한 것을 보여줄 수 있습니까? 여기

사용자가 다음과 같은 개체 관계도 (ERD) ERD 및 질문 /* (나) 계산하고 추정 (즉, 이전의 날짜에서 주어진 작업의 표준 비율을 사용하여 전체 비용을 반환 추정 시간에 더 이상의 변화가 이루어졌다. 코드 스크립트를 각 테스트 문에서 출력의 각 기능 + '스크린 샷'을 테스트하는 SELECT 문을 포함. */

+1

함수 내에있는 쿼리를 실행하십시오. 힌트 : 왜 '데'? – Aleksej

+0

나는 첫 번째 task_history_id가 1과 같을 것이라고 가정 했으므로, 추가 된 시간보다 먼저 첫 번째 작업 만 가져 오면 새로운 ID가 만들어져 이전 시간을 볼 수 있습니다. 첫 번째 예상 시간이 필요하므로 hourly_rate로 시간을 계산하십시오. –

답변

1

당신이를 적용 할 HAVING를 사용하고있는 것으로 보인다 간단한 WHERE 조건. 같은 시험 ples :

SQL> create table groupTable (id number, num number); 

Table created. 

SQL> select sum(num) 
    2 from groupTable 
    3 where id = 1; 

    SUM(NUM) 
---------- 


SQL> select sum(num) 
    2 from groupTable 
    3 having id = 1; 
having id = 1 
     * 
ERROR at line 3: 
ORA-00979: not a GROUP BY expression 


SQL> select sum(num) 
    2 from groupTable 
    3 group by id 
    4 having id = 1; 

no rows selected 

SQL> select sum(num) 
    2 from groupTable 
    3 group by id 
    4 having sum(num) = 1; 

no rows selected 

SQL> select sum(num) 
    2 from groupTable 
    3 where sum(num) = 1 
    4 group by id; 
where sum(num) = 1 
     * 
ERROR at line 3: 
ORA-00934: group function is not allowed here 


SQL>