CftClub.ru
Клуб специалистов ЦФТ-Банк

не работает функция

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Псевдоним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(. . . ))
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru