(в вашем исходном вопросе) у нас нет тестовых данных, поэтому продемонстрировать (или отладить) вашу функцию не так просто.Однако вот несколько идей ...
Тестовые данные
-- 2 columns: transaction (t_a) and knr (konto number)
create table konto ( t_a, knr )
as
select 100.00, 'AA001' from dual union all
select -10.00, 'AA001' from dual union all
select 200.00, 'AA002' from dual union all
select -20.00, 'AA002' from dual union all
select 300.00, 'AA003' from dual ;
Для самой функции нам, вероятно, не нужно передавать "saldo" какпараметр (так как это то, что наша функция должна возвращать ...).Вероятно, нам следует настроить тип возвращаемого значения.Обратите внимание, что функция зависит от таблицы конто (даже если это измененная версия здесь), что, вероятно, не то, что вам нужно (так как эта функция будет работать только с таблицей конто).
Функция(изменено, с комментариями)
create or replace function get_saldo(
-- p_saldo in konto.saldo%type, -- <- we don't know the saldo, don't use it as parameter
p_knr in konto.knr%type
)
return number -- <- saldo: a number, not a varchar2
as
v_saldo number := 0 ;
begin
select sum( t_a ) into v_saldo
from konto -- <- the function depends on the KONTO table!
where knr = p_knr ;
-- and saldo = p_saldo -- <- needed ?
-- and p_knr = p_saldo; -- <- the account code will hardly ever be equal the balance
return v_saldo ;
end;
/
Для тестирования функции можно «выбрать из двойного», хотя за кулисами выполняется SELECT ... FROM konto ...
Тестирование
SQL> select get_saldo( 'AA001' ) from dual ;
GET_SALDO('AA001')
------------------
90
Всегда (всегда) используйте встроенные функции, если это возможно, так как они были тщательно протестированы.