Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Псевдоним123 Участник - экстремал
Вступление в Клуб: 05.06.2018
|
Чт Янв 17, 2019 09:58  не работает функция |
|
Полезность: Нет оценки
|
здравствуйте, подскажите, почему не работает функция
[code]
function get_username(p_name varchar2(200), p_depart_code varchar2(50))
return varchar(30)
is
l_username varchar(100);
begin
for u in ::[USER] ALL where u.[name] = trim(p_name) and u.[DEPART].[code] like trim('p_depart_code%') and u.[end_date] is null loop
l_username := u.[username];
exit;
end loop;
end;
[/code] |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Чт Янв 17, 2019 10:11  Re: не работает функция |
|
Полезность: Нет оценки
|
Псевдоним123 пишет: | здравствуйте, подскажите, почему не работает функция
[code]
function get_username(p_name varchar2(200), p_depart_code varchar2(50))
return varchar(30)
is
l_username varchar(100);
begin
for u in ::[USER] ALL where u.[name] = trim(p_name) and u.[DEPART].[code] like trim('p_depart_code%') and u.[end_date] is null loop
l_username := u.[username];
exit;
end loop;
end;
[/code] |
Видимо из за этого фрагмента
u.[DEPART].[code] like trim('p_depart_code%')
У Вас code в банке начинаются с p_depart_code%???
Может быть вот так хотел написать?
u.[DEPART].[code] like trim('%'||p_depart_code||'%')
или так...
u.[DEPART].[code] like trim(p_depart_code||'%')
Последний раз редактировалось: Матвеев Евгений (Чт Янв 17, 2019 10:18), всего редактировалось 2 раз(а) |
|
 |
Псевдоним123 Участник - экстремал
Вступление в Клуб: 05.06.2018
|
Чт Янв 17, 2019 10:18  Re: не работает функция |
|
Полезность: Нет оценки
|
Матвеев Евгений пишет: |
Видимо из за этого фрагмента
u.[DEPART].[code] like trim('p_depart_code%')
У Вас code в банке начинаются с p_depart_code%??? |
у меня есть только первая часть от p_depart_code
без вышеуказанной строки функция тоже не работает... |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Чт Янв 17, 2019 10:19  Re: не работает функция |
|
Полезность: 1
|
Псевдоним123 пишет: | Матвеев Евгений пишет: |
Видимо из за этого фрагмента
u.[DEPART].[code] like trim('p_depart_code%')
У Вас code в банке начинаются с p_depart_code%??? |
у меня есть только первая часть от p_depart_code
без вышеуказанной строки функция тоже не работает... |
только первая часть от p_depart_code...
тогда так пиши
u.[DEPART].[code] like trim(p_depart_code||'%')
А то получается, что ты по имени переменной поиск выполняешь, но не по её содержимому |
|
 |
Псевдоним123 Участник - экстремал
Вступление в Клуб: 05.06.2018
|
Чт Янв 17, 2019 10:26   |
|
Полезность: Нет оценки
|
все так же не работает..... |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Чт Янв 17, 2019 10:33   |
|
Полезность: 1
|
Наверное функция должна что-то возвращать, т.е. return l_username;
И еще
return varchar(30)
а
l_username varchar(100);
может возникнуть ошибка.
Опять же принято использовать varchar2 |
|
 |
Эмиралька Эксперт
Вступление в Клуб: 09.11.2015
|
Пт Янв 18, 2019 05:32   |
|
Полезность: Нет оценки
|
Volod пишет: | Наверное функция должна что-то возвращать, т.е. return l_username;
И еще
return varchar(30)
а
l_username varchar(100);
может возникнуть ошибка.
|
не может. В Oracle не описывается return varchar(30) это в PLP навроде комментария "а тут мы предполагаем, что вернётся не больше 30 символов", но реально никакого контроля нет. |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Пт Янв 18, 2019 09:43   |
|
Полезность: Нет оценки
|
Эмиралька пишет: | Volod пишет: | Наверное функция должна что-то возвращать, т.е. return l_username;
И еще
return varchar(30)
а
l_username varchar(100);
может возникнуть ошибка.
|
не может. В Oracle не описывается return varchar(30) это в PLP навроде комментария "а тут мы предполагаем, что вернётся не больше 30 символов", но реально никакого контроля нет. |
Весь текст программы не приведен, поэтому не знаю, в какую переменную эта функция возвратит свое значение. |
|
 |
Эмиралька Эксперт
Вступление в Клуб: 09.11.2015
|
Пт Янв 18, 2019 12:20   |
|
Полезность: Нет оценки
|
Volod пишет: | Эмиралька пишет: | Volod пишет: | Наверное функция должна что-то возвращать, т.е. return l_username;
И еще
return varchar(30)
а
l_username varchar(100);
может возникнуть ошибка.
|
не может. В Oracle не описывается return varchar(30) это в PLP навроде комментария "а тут мы предполагаем, что вернётся не больше 30 символов", но реально никакого контроля нет. |
Весь текст программы не приведен, поэтому не знаю, в какую переменную эта функция возвратит свое значение. |
Да какая разница. Объявления следующих функций идентичны:
Код: |
function func1 return varchar2(1);
function func2 return varchar2;
|
Обе могут вернуть строку любой длины и ничего им за это не будет. |
|
 |
alx Участник - экстремал
Вступление в Клуб: 29.06.2007
|
Вт Янв 29, 2019 11:54   |
|
Полезность: Нет оценки
|
ручной запрос в таблице что-то выдаст по передаваемым в функцию параметрам? какая-то ошибка выбрасывается при вызове? |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Вт Янв 29, 2019 14:19   |
|
Полезность: Нет оценки
|
если вдруг код может содержать буквы
Может быть регистрозависимость, тогда надо обе части
Дополнить Upper
upper(trim(. . . )) |
|
 |
|