2016-08-16 102 views
-1

內選擇clausule當我這樣做:PL/SQL函數返回錯誤值

select sum(m.mot) 
from rmtq mq 
join rmo m on mq.id = m.id 
where mq.another = 138; 

返回值= 2,這是正確的。但是,當我把這個代碼在函數內部:

create or replace function get(another in number) return number 
    is ret number := 0; 
    begin 
     select sum(m.mot) 
       into ret 
       from rmtq mq 
       join rmo m on mq.id = m.id 
       where mq.another = another 
     return(ret); 
    end; 

我打電話:

exec dbms_output.put_line(get(138)); 

返回值= 39,這是不正確。那是什麼39?

+5

'another'需要與函數名合格的或不同的命名形式參數。名稱解析自下而上起作用,這意味着您的查詢認爲'another'是'rmtq'表中列的名稱,而不是形式參數的名稱。 –

+0

嘗試命名函數參數another_in,以便知道它是IN參數。 –

+0

[相關問題](http://stackoverflow.com/q/36627313/266304)與文檔鏈接解釋你所看到的。 –

回答

0

該評論是正確的問題;免得有人浪費時間在這,你必須正確地寫入參數的名稱,例如:

create or replace function get(p_another in number) return number 
    is ret number := 0; 
    begin 
     select sum(m.mot) 
       into ret 
       from rmtq mq 
       join rmo m on mq.id = m.id 
       where mq.another = p_another 
     return(ret); 
    end;