2016-10-11 8 views
0

EDIT: я изменил свой код сейчас.Проблема с функцией 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; 

он работает без ошибок, но все строки пустые? Может ли кто-нибудь показать мне, что я сделал неправильно, пожалуйста.

здесь ли Entity Relationship Diagram (ERD) ERD И ВОПРОС /* (б), чтобы вычислить и вернуть полную стоимость, используя стандартные ставки данной задачи на дату оценки (т.е. до были сделаны какие-либо дальнейшие изменения расчетного часа. кода сценариев, в том числе ЗЕЬЕСТА для проверки каждого функции + «экрана» на выходе из каждого оператора проверки. */

+1

Попробуйте выполнить запрос, который находится внутри вашей функции. подсказка: зачем «иметь»? – Aleksej

+0

Я предположил, что у меня будет только первая задача task_history_id, равная 1, так что я получаю первую задачу перед любыми добавленными часами, которые делают новый идентификатор, чтобы вы могли видеть предыдущие часы. так как мне нужны первые расчетные часы, а затем время, которое на 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> 

 Смежные вопросы

  • Нет связанных вопросов^_^