powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / прошу помощи сообщества.
5 сообщений из 5, страница 1 из 1
прошу помощи сообщества.
    #39418736
saxarock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
CREATE OR REPLACE FUNCTION get_num_hour(
    data_in DATE)
  RETURN NUMBER
IS
  CURSOR big_data
  IS
    SELECT DISTINCT
      CASE
        WHEN to_date (TO_CHAR ( MAX(data_in) OVER (PARTITION BY TRUNC(data_in,
          'DD'), SUBSTR(who_is, 1, instr(Who_is, '.')) ), 'HH24:MI:SS'),
          'HH24:MI:SS') <= to_date ('17:46:00', 'HH24:MI:SS')
        THEN 0
        ELSE to_number(floor((((to_number( to_date(TO_CHAR(MAX(data_in)OVER(
          PARTITION BY TRUNC(data_in, 'DD'),SUBSTR(who_is, 1, instr(Who_is, '.'
          )) ), 'HH24:MI:SS'), 'HH24:MI:SS') - to_date ('17:30:00',
          'HH24:MI:SS'))                     *1440 ))/ 60)) )
      END hours,
      CASE
        WHEN to_date (TO_CHAR ( MAX(data_in) OVER (PARTITION BY TRUNC(data_in,
          'DD'), SUBSTR(who_is, 1, instr(Who_is, '.')) ), 'HH24:MI:SS'),
          'HH24:MI:SS') <= to_date ('17:46:00', 'HH24:MI:SS')
        THEN 0
        ELSE to_number(EXTRACT(MINUTE FROM NUMTODSINTERVAL((to_date (TO_CHAR (
          MAX(data_in) OVER (PARTITION BY TRUNC(data_in, 'DD'), SUBSTR(who_is,
          1, instr(Who_is, '.')) ), 'HH24:MI:SS'), 'HH24:MI:SS') - to_date (
          '17:30:00', 'HH24:MI:SS') )                            *1440,'MINUTE'
          )))
      END minutes
    FROM
      pr_t_g
    WHERE
      TRUNC (data_in, 'DD') NOT IN ( to_date ('04.02.2017 00:00:00',
      'dd.mm.yyyy hh24:mi:ss'), to_date ('05.02.2017 00:00:00',
      'dd.mm.yyyy hh24:mi:ss'), to_date ('11.02.2017 00:00:00',
      'dd.mm.yyyy hh24:mi:ss'), to_date ('12.02.2017 00:00:00',
      'dd.mm.yyyy hh24:mi:ss'), to_date ('18.02.2017 00:00:00',
      'dd.mm.yyyy hh24:mi:ss'), to_date ('19.02.2017 00:00:00',
      'dd.mm.yyyy hh24:mi:ss'), to_date ('25.02.2017 00:00:00',
      'dd.mm.yyyy hh24:mi:ss'), to_date ('26.02.2017 00:00:00',
      'dd.mm.yyyy hh24:mi:ss') ) ;
TYPE hourstab IS   TABLE OF big_data%rowtype;
  v_hoursandminutes hourstab;
  cnumber NUMBER;
BEGIN
  OPEN big_data;
  FETCH
    big_data bulk collect
  INTO
    v_hoursandminutes;
  CLOSE big_data;
  FOR i IN v_hoursandminutes.first..v_hoursandminutes.last
  LOOP
    IF v_hoursandminutes(i).minutes < 15
      THEN
      cnumber := to_number (v_hoursandminutes(i).hours);
      /*elsif v_hoursandminutes(i).minutes >= 45
      then cnumber := v_hoursandminutes(i).hours + 1;
      elsif v_hoursandminutes(i).minutes >= 16
      then cnumber := v_hoursandminutes(i).hours + 0.5;*/
    ELSE
      NULL;
    END IF;
  END LOOP;
  RETURN cnumber;
EXCEPTION
WHEN OTHERS THEN
  raise_application_error(-20001,'An error was encountered - ##'||SQLCODE||
  '## -ERROR- ##'||SQLERRM);
END;



При вызове функции получаю
Код: plsql
1.
 ORA-20001: An error was encountered - ##-6502## -ERROR- ##ORA-06502: PL/SQL: numeric or value error


просьба пояснить (кому не лень), что сделано не так?
...
Рейтинг: 0 / 0
прошу помощи сообщества.
    #39418740
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxarockпросьба пояснить (кому не лень), что сделано не так?Убери свой бесполезный обработчик ошибок, и Oracle сам скажет тебе, в какой строке.
...
Рейтинг: 0 / 0
прошу помощи сообщества.
    #39418753
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxarock
Код: plsql
1.
to_date ('04.02.2017 00:00:00', 'dd.mm.yyyy hh24:mi:ss')

RTFM Date Literal
saxarock
Код: plsql
1.
2.
bulk collect
  FOR i IN v_hoursandminutes.first..v_hoursandminutes.last

Для гарантированно неразряженных коллекций есть безопасный и более короткий способ итерирования, не приводящий к подобной ошибке.
...
Рейтинг: 0 / 0
прошу помощи сообщества.
    #39418756
saxarock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

спс, валится вот здесь
Код: plsql
1.
 FOR i IN v_hoursandminutes.first..v_hoursandminutes.last




Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "M.GET_NUM_HOUR", line 50
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    An arithmetic, numeric, string, conversion, or constraint error
           occurred. For example, this error occurs if an attempt is made to
           assign the value NULL to a variable declared NOT NULL, or if an
           attempt is made to assign an integer larger than 99 to a variable
           declared NUMBER(2).
*Action:   Change the data, how it is manipulated, or how it is declared so
           that values do not violate constraints.



продолжу ковырять..
...
Рейтинг: 0 / 0
прошу помощи сообщества.
    #39418794
saxarock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicsaxarock
Код: plsql
1.
to_date ('04.02.2017 00:00:00', 'dd.mm.yyyy hh24:mi:ss')

RTFM Date Literal

Поправил.

Elicsaxarock
Код: plsql
1.
2.
bulk collect
  FOR i IN v_hoursandminutes.first..v_hoursandminutes.last

Для гарантированно неразряженных коллекций есть безопасный и более короткий способ итерирования, не приводящий к подобной ошибке.

Думаю так норм
Код: plsql
1.
FOR i IN 1..v_hoursandminutes.count

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


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