Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Минимальный элемент массива / 15 сообщений из 15, страница 1 из 1
16.03.2010, 17:52
    #36524432
Bucher
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
Описан тип и переменная

type number_type IS TABLE OF number INDEX BY BINARY_INTEGER;
num number_type;

Далее в этк переменную идет вставка
num(1):=1;
num(2):=10;
num(3):=5;

Каким оператором (командой) получить мин/мах значение num?
Что-то типа
max(num) = 10
min(num) = 1
...
Рейтинг: 0 / 0
16.03.2010, 17:57
    #36524448
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
Bucher,

Скорее всего только в цикле.
...
Рейтинг: 0 / 0
16.03.2010, 18:02
    #36524464
JaRo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
используйте ассоциативный массив по этому полю (если это Вам подходит), и тогда просто FIRST/LAST
...
Рейтинг: 0 / 0
16.03.2010, 18:04
    #36524473
comphead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
Bucher,

если number_type глобальный, то

Код: plaintext
1.
2.
select max(column_value),
         min(column_value)
from table(cast(num) as number_type)
...
Рейтинг: 0 / 0
16.03.2010, 18:10
    #36524484
JaRo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
compheadесли number_type глобальныйпо-моему описание типа не дает на это шансов..
И потом, ради этого тащить из PL в SQL и обратно ...
...
Рейтинг: 0 / 0
16.03.2010, 18:15
    #36524498
comphead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
JaRo,

возможно и так.

тогда либо классическая задачка на нахождение макс и мин в массиве,
либо в динамике загнать через forall в создаваемую таблицу, а там обычными макс и мин. потом табле убить
...
Рейтинг: 0 / 0
16.03.2010, 18:17
    #36524504
JaRo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
compheadлибо в динамике загнать через forall в создаваемую таблицу, а там обычными макс и мин. потом табле убитьВы о чем?... Какая создаваемая таблица?
...
Рейтинг: 0 / 0
16.03.2010, 18:20
    #36524515
comphead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
JaRo,

это уже бред последнего часа работы.
1. в динамике создается таблица с одной колонкой
2. загоняется туда весь массив
3. находится max и min
4. убивается табле.

зы. все в динамике
...
Рейтинг: 0 / 0
16.03.2010, 19:28
    #36524722
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
compheadJaRo,

это уже бред последнего часа работы.
1. в динамике создается таблица с одной колонкой
2. загоняется туда весь массив
3. находится max и min
4. убивается табле.

зы. все в динамике
а не проще тупо циклом пробежатся (если нет функционала и в новейших версиях)?

.....
stax
...
Рейтинг: 0 / 0
16.03.2010, 19:30
    #36524731
JaRo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
stax..compheadJaRo,

это уже бред последнего часа работы.
1. в динамике создается таблица с одной колонкой
2. загоняется туда весь массив
3. находится max и min
4. убивается табле.

зы. все в динамике
а не проще тупо циклом пробежатся (если нет функционала и в новейших версиях)?

.....
staxпо-моему всё проще, чем это...
...
Рейтинг: 0 / 0
16.03.2010, 20:21
    #36524817
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
JaRostax..compheadJaRo,

это уже бред последнего часа работы.
1. в динамике создается таблица с одной колонкой
2. загоняется туда весь массив
3. находится max и min
4. убивается табле.

зы. все в динамике
а не проще тупо циклом пробежатся (если нет функционала и в новейших версиях)?

.....
staxпо-моему всё проще, чем это...
куда уж проще
(я если индекс минимального надо)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare
 type number_type IS TABLE OF number INDEX BY BINARY_INTEGER;
 num number_type;
 min_num number;
begin
--Далее в этк переменную идет вставка
 num( 1 ):= 1 ;
 num( 2 ):=- 10 ;
 num( 3 ):= 5 ;
 min_num:=num(num.first);
 for i in num.first+ 1 ..num.last loop
  if min_num>num(i) then
   min_num:=num(i);
  end if;
 end loop;
 dbms_output.put_line(min_num);
end;
/


......
stax
...
Рейтинг: 0 / 0
17.03.2010, 10:32
    #36525461
comphead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
stax..,

я ж писал

автортогда либо классическая задачка на нахождение макс и мин в массиве ,
либо в динамике загнать через forall в создаваемую таблицу, а там обычными макс и мин. потом табле убить
)))
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
20.10.2016, 13:46
    #39330612
igorlab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
а если в массиве еще и null присутствует...
единственное что пришло в голову

declare
min1 number;
min1ind number;
type priceArray IS VARRAY(100) OF integer;
priceXgArr priceArray;

begin
priceXgArr := priceArray(null, null, 11, 34, 12, 55, 14, 11);

FOR i IN 1..priceXgArr.COUNT LOOP --находим не null значение прибавляем к нему 1 чтобы оно было больше и приравниваем его к минимальному
if priceXgArr(i) is not null then
min1 := priceXgArr(i)+1;
end if;
END LOOP;

FOR i IN 1..priceXgArr.COUNT LOOP
if priceXgArr(i) < min1 then
min1 := priceXgArr(i);
min1ind := i;
end if;
END LOOP;

dbms_output.put_line( 'min = ' || min1 || ', ind = ' || min1ind);

end;
...
Рейтинг: 0 / 0
20.10.2016, 13:47
    #39330617
igorlab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
а если в массиве еще и null присутствует...
единственное что пришло в голову

Код: 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.
declare 
  min1  number;
  min1ind  number;
  type priceArray IS VARRAY(100) OF integer;
  priceXgArr priceArray;  

begin
  priceXgArr := priceArray(null, null, 11, 34, 12, 55, 14, 11);
  
  FOR i IN 1..priceXgArr.COUNT LOOP   --находим не null значение прибавляем к нему 1 чтобы оно было больше и приравниваем его к минимальному
    if priceXgArr(i) is not null then 
      min1 := priceXgArr(i)+1;
    end if;
  END LOOP;
  
  FOR i IN 1..priceXgArr.COUNT LOOP   
    if priceXgArr(i) < min1  then 
      min1 := priceXgArr(i);
      min1ind := i;
    end if;
  END LOOP;
 
 dbms_output.put_line( 'min = ' || min1  || ', ind = ' ||  min1ind); 

end;
...
Рейтинг: 0 / 0
20.10.2016, 14:05
    #39330647
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальный элемент массива
igorlabединственное что пришло в головуБыдлокод.igorlab
Код: plsql
1.
if priceXgArr(i) < min1  then 

Код: plsql
1.
if priceXgArr(i) < min1 or min1 is null then 
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Минимальный элемент массива / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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