Проверка работоспособности функции с двойным - PullRequest
0 голосов
/ 12 октября 2018

Итак, я новичок в SQL и продолжаю учиться дальше.И теперь я наткнулся на функции.Функция создана, но я хочу проверить, работает ли она, но не заставить ее работать.

Попытка создать функцию, возвращающую фактический баланс, принадлежащий определенному номеру банковского счета.

create or replace function get_saldo(
P_saldo in konto.saldo%type,
p_knr in konto.knr%type)
return varchar2
as
v_saldo varchar2(20);
begin
select count(knr)
into v_saldo
from konto
where knr = p_knr
and saldo = p_saldo
and  p_knr = p_saldo;
return  v_saldo;
end;
/

Вотмой тестовый код;

 select get_saldo(p_saldo,p_knr)
 from dual;

Ценю любую помощь

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

(в вашем исходном вопросе) у нас нет тестовых данных, поэтому продемонстрировать (или отладить) вашу функцию не так просто.Однако вот несколько идей ...

Тестовые данные

-- 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

Всегда (всегда) используйте встроенные функции, если это возможно, так как они были тщательно протестированы.

0 голосов
/ 12 октября 2018

ОК - думаю, вы заставите его работать, если вы попробуете это

select get_saldo(0,0) from dual; 

Я тестировал его, используя следующее определение таблицы

create table konto (saldo number(10,2), knr number(38,0));

Затем копия вашегоfunction

create or replace function get_saldo(
P_saldo in konto.saldo%type,
p_knr in konto.knr%type)
return varchar2
as
v_saldo varchar2(20);
begin
select count(knr)
into v_saldo
from konto
where knr = p_knr
and saldo = p_saldo
and  p_knr = p_saldo;
return  v_saldo;
end;
/

И тестовый запрос от dual работает как положено - но возвращает 0 - так как я еще не вставил ни одной строки

> SQL> select get_saldo(0,0) from dual; 
> 
> GET_SALDO(0,0)
> -------------------------------------------------------------------------------- 0
> 
> SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...