Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / [Ora] Проблемы с функцией / 25 сообщений из 40, страница 1 из 2
13.11.2019, 08:57
    #39888395
FunnyRabbit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Ora] Проблемы с функцией
Код функции
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
13.11.2019, 09:10
    #39888399
Надфиль
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Ora] Проблемы с функцией
FunnyRabbit

А вот так нет:

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

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

ORA-01403: no data found

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

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

Код: 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
13.11.2019, 09:31
    #39888412
FunnyRabbit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Ora] Проблемы с функцией
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
13.11.2019, 09:38
    #39888418
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Ora] Проблемы с функцией
FunnyRabbitПочему?
потому
...
Рейтинг: 0 / 0
13.11.2019, 09:40
    #39888419
FunnyRabbit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Ora] Проблемы с функцией
123йй,

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

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

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

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


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

Выводит

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

Выводит

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


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

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

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

Почему?

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

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

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

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

Проверил

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

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


Ничего
...
Рейтинг: 0 / 0
13.11.2019, 11:32
    #39888499
K790
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Ora] Проблемы с функцией
Вы бы привели полный тест кейс, с оформлением тегом src. Укажите версию БД.
...
Рейтинг: 0 / 0
13.11.2019, 11:48
    #39888513
FunnyRabbit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Ora] Проблемы с функцией
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
13.11.2019, 11:54
    #39888522
Надфиль
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Ora] Проблемы с функцией
FunnyRabbit
V_UNAGGRSP m

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

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

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

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

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

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


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