Функция PL / sql возвращает ошибку многих строк - PullRequest
0 голосов
/ 03 июля 2019

Эта функция возвращает только VAC_NAME (но не список этих имен)

create or replace function FCT_VAC(NO_VAC in number)
return varchar2
is
V_lNAME varchar2(30);
begin
    select u.UTI_NAME ||' '|| u.UTI_L_NAME into V_lNAME  
    from USER_TAB u
      join DEAL_TAB d on u.USERNAME = d.USERNAME
;

return V_lNAME;
end FCT_VAC_NAME;
/
set serveroutput on;
select FCT_VAC_NAME(3) as Vacantion_Name from dual;

, но если я просто выберу

 select u.UTI_NAME, u.UTI_L_NAME  
 from USER_TAB u 
    join DEAL_TAB d on u.USERNAME = d.USERNAME
;

Она работает, как и ожидалось, чтопроблема функции?

1 Ответ

0 голосов
/ 03 июля 2019

Запрос возвращает две (или более) строки;они не могут вписаться в скалярную переменную v_lname varchar2(30).

Вопрос: какого результата вы ожидаете?Только одно значение?Затем убедитесь, что запрос возвращает его;Предложение WHERE может помочь (особенно если вы передаете параметр, но никогда не используете его), например,

select u.UTI_NAME ||' '|| u.UTI_L_NAME 
into V_lNAME  
from USER_TAB u
  join DEAL_TAB d on u.USERNAME = d.USERNAME
where u.no_vac = p_no_vac;                      --> this

Обратите внимание, что я переименовал параметр;Я не знаю, содержит ли какая-либо из этих таблиц столбец no_vac, но - если это так - вам лучше использовать другое имя для параметра.Одним из вариантов является добавление к нему префикса p_.

В противном случае переписать функцию так, чтобы она возвращала что-то еще (пользовательский тип, таблица и т. Д.).

...