powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / [Ora] Проблемы с функцией
40 сообщений из 40, показаны все 2 страниц
[Ora] Проблемы с функцией
    #39888395
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код функции
create or replace function F_GET_KOSGU(nrn in number) return varchar2 is
nKOSGU varchar2(100);
begin

select distinct m.sagngrp
into nKOSGU
from T m
where m.nagent = nrn;

return nKOSGU;

exception
when no_data_found then
return sqlerrm;

when others then
return sqlerrm;
end;


Вот так работает:


select distinct m.sagngrp
from T m
where m.nagent = 9487598;


А вот так нет:

select F_GET_KOSGU(9487598)
from dual


Почему?
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888399
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FunnyRabbit

А вот так нет:

что значит "нет"
1. ошибка выполнения?
2. неожиданный результат?
3. .... ?

ну и вывод desc T
в любом случае не помешает.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888403
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надфиль,

ORA-01403: no data found

Это при вызове функции.

Сам запрос из функции работает на ура.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888410
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как написали, так и работает.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Connected to Oracle Database 11g Release 11.2.0.1.0 
Connected as supermag@//192.168.1.201/DBOFFICE

SQL> 
SQL> create or replace function F_GET_KOSGU(nrn in number) return varchar2 is
  2  nKOSGU varchar2(100);
  3  begin
  4  
  5  select 0
  6  into nKOSGU
  7  from dual
  8  where rownum < 1;
  9  
 10  return nKOSGU;
 11  
 12  exception
 13  when no_data_found then
 14  return sqlerrm;
 15  
 16  when others then
 17  return sqlerrm;
 18  end;
 19  /

Function created


SQL> select F_GET_KOSGU (0) from dual;

F_GET_KOSGU(0)
--------------------------------------------------------------------------------
ORA-01403: данные не найдены

SQL> 



DESC T ?
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888412
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm,

create table T
(
dummy VARCHAR2(1),
nagent NUMBER(17) not null,
company NUMBER(17) not null,
crn NUMBER(17) not null,
sagngrp VARCHAR2(20) not null,
name VARCHAR2(80) not null
);

Данные не дам. Корпоративная тайна
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888418
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FunnyRabbitПочему?
потому
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888419
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй,

Функия возвращает ошибку, а сам запрос ДАННЫЕ
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888445
Артём Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лично у меня в Oracle 12.1 данный пример адекватно работает, генерирует исключение только когда реально нет данных по выборке.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888447
Артём Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй,

В данной функции перехватывается исключение no_data_found и возвращается строка, а не пробрасывается дальше RAISE, поэтому при вызове из SQL мы увидим информацию об этом исключении в виде строки.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888463
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FunnyRabbit,

поменяйте
when no_data_found then
return sqlerrm;

на что-то другое и сравните результат
напр
when no_data_found then
return 'Для nagent = '||nrn||' KOSGU не найдено.');


.....
stax
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888464
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Выводит

автор'Для nagent = 18987324 KOSGU не найдено.'
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888470
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FunnyRabbit
Stax,

Выводит

автор'Для nagent = 18987324 KOSGU не найдено.'


вероятно в Т нет (недоступна) строки с nagent = 18987324;

зы
select distinct m.sagngrp from T m where m.nagent = 18987324;

.....
stax
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888471
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FunnyRabbit

Почему?

а ты уверен что работаешь в одной базе и под одним и тем же пользователем?
я имею ввиду при запуске просто запроса и куска с функцией?
а то бывало )
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888472
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надфиль,

)))))))) Обижаете. Конечно уверен. )
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888482
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FunnyRabbit
Конечно уверен. )

я бы перепроверил.
ну упрости функцию.
убери обработку исключений.
и просто без переменных сделай запрос.
возможно оракал, как иногда бывает, выводит совсем не то сообщение, о котором хочет сказать.
напиши вместо distinct m.sagngrp
max(m.sagngrp)
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888483
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot] Надфиль#22015121]
FunnyRabbit
Конечно уверен. )

я бы перепроверил.

Проверил

ну упрости функцию.
убери обработку исключений.
и просто без переменных сделай запрос.
возможно оракал, как иногда бывает, выводит совсем не то сообщение, о котором хочет сказать.
напиши вместо distinct m.sagngrp
max(m.sagngrp)

Упростил. Поставил max(m.sagngrp). Ничего не выводит. (((((
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888485
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FunnyRabbit,
"Ничего", или ошибка?
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888492
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надфиль
FunnyRabbit,
"Ничего", или ошибка?


Ничего
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888499
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы бы привели полный тест кейс, с оформлением тегом src. Укажите версию БД.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888513
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
K790
Вы бы привели полный тест кейс, с оформлением тегом src. Укажите версию БД.


11.2.0.4.0

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
create or replace function F_GET_KOSGU(nrn in number) return varchar2 is
  nKOSGU varchar2(20);
begin
  select max( m.sagngrp)
    into nKOSGU
    from V_UNAGGRSP m, agnlist a
   where m.nagent = a.rn
     and a.rn = nrn;

  return nKOSGU;
exception
  when no_data_found then
    return sqlerrm;
  
  when others then
    return sqlerrm;
end;

select max(m.sagngrp)
  from V_UNAGGRSP m, agnlist a
 where m.nagent = a.rn
   and a.rn = 18987324;

select F_GET_KOSGU(18987324) from dual;
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888522
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FunnyRabbit
V_UNAGGRSP m

а нет ли в этой таблице поля с названием nrn?
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888532
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FunnyRabbit
Код: plsql
1.
2.
3.
4.
  select max
…
exception
  when no_data_found then

Мёртвый код. Обычное следствие быдлокодинга.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888564
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надфиль,

Есть. Но все дело в том, что параметр ОБЯЗАН иметь такое имя.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888566
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FunnyRabbit

что параметр ОБЯЗАН иметь такое имя.

звучит как бред)
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888570
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надфиль,

Это система Парус. Пользовательские расширения должны именоваться в соответствии с его устройством.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888573
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FunnyRabbit,

Объяви переменную внутри и присвой ей параметр функции, в запросе поставь переменную.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888574
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FunnyRabbit

Это система Парус. Пользовательские расширения должны именоваться в соответствии с его устройством.

что может помешать обозвать параметр как угодно?
и как звучит требование по поводу параметров функций/процедур?
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888576
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iOracleDev

Объяви переменную внутри и присвой ей параметр функции, в запросе поставь переменную.

кстати, да. требование настолько тупое что я даже растерялся))
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888579
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надфиль
что может помешать обозвать параметр как угодно?

Может быть вызов функций и процедур с именованными параметрами.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888584
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iOracleDev
FunnyRabbit,

Объяви переменную внутри и присвой ей параметр функции, в запросе поставь переменную.


Спасибо. Помогло. Вопрос снят.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888587
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Объяви переменную внутри и присвой ей параметр функции, в запросе поставь переменную.
Вне зависимости от правил именования переменных, присутствие в запросе имен без алиас-тчк повод задуматься. С другой стороны, наличие алиас-тчк обеспечивает достаточно высокую степень изолированности пространств имен и без специальных префиксов-суффиксов. То есть самодостаточно.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888589
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FunnyRabbit

Спасибо. Помогло. Вопрос снят.

вот поэтому сразу и просили, в том числе и я.
максимум информации о таблицах. о коде. и т.д.
ибо есть ньюансы. об одном из них ты сегодня узнал.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888592
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-
Вне зависимости от правил именования переменных, присутствие в запросе имен без алиас-тчк повод задуматься. С другой стороны, наличие алиас-тчк обеспечивает достаточно высокую степень изолированности пространств имен и без специальных префиксов-суффиксов. То есть самодостаточно.

и какой алис тут нужен для указания запросу, что мы тут переменную используем, а не поле перед которым алиас забыли?
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888594
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надфиль
и какой алис тут нужен для указания запросу, что мы тут переменную используем, а не поле перед которым алиас забыли?
RTFM Qualified Names and Dot Notation (FAQ)
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888597
Надфиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, я примерно так и думал)
прошло мимо меня, наверно потому что я код редко пишу)
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888616
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FunnyRabbit
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or replace function F_GET_KOSGU(nrn in number) return varchar2 is
  nKOSGU varchar2(20);
begin
  select max( m.sagngrp)
    into nKOSGU
    from V_UNAGGRSP m, agnlist a
   where m.nagent = a.rn
     and a.rn = [color=red]F_GET_KOSGU.nrn[/color];

  return nKOSGU;
exception 
  when others then
    return sqlerrm;
end;

...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888668
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oragraf
Код: plsql
1.
2.
3.
4.
5.
.....
exception 
  when others then
    return sqlerrm;
end;


нафига ?
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888706
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123йй
oragraf
Код: plsql
1.
2.
3.
4.
5.
.....
exception 
  when others then
    return sqlerrm;
end;


нафига ?
Автора не худо бы спросить
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888716
FunnyRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oragraf,

Это для отладки.
...
Рейтинг: 0 / 0
[Ora] Проблемы с функцией
    #39888743
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123йй

нафига ?


шоб не слетала выборка,
почему не найдено бухи разберутся

.....
stax
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / [Ora] Проблемы с функцией
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]