Змінюй хід війни! Допомагай ЗСУ!
  • Знижка на баннерну рекламу 30%! Банер на всіх сторінках сайту, в мобільній та десктопній версії за 14 тис. грн на місяць. Статистика сайту. Контакт: kharkovforum.com@gmail.com

Oracle

  • Автор теми Автор теми JoyStick 0_o
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 07.02.2010
Повідом.: 316
написать процедуру и функцию в которых вычисляется max и min значение цены в таблице goods.
помогите кто чем может, уже все перепробовал:confused::confused::confused:
 
а что, в оракле нет встроенных функций макс и мин?
 
Вот что у меня получилось, но там где-то ошибка, помогите найти
create or replace procedure p1 is
maxp number;
minp number;
begin
select max(price) into maxp from goods;
select min(price) into minp from goods;
dbms_output.putline('min = ' ||minp || ' max = ' ||maxp);



create or replace function f1 what varchar2 return number is
temp number;
begin
if what = 'min' then
select min(price) into temp from goods;
return temp;
elsif what = 'max' then
elsif what = 'min' then
endif;
end;
 
create or replace procedure p1
as
maxp number;
minp number;
begin
select max(price) into maxp from goods;
select min(price) into minp from goods;
dbms_output.put_line('min = ' ||minp || ' max = ' ||maxp);
end;
/

create or replace function f1(what varchar2) return number
as
temp number;
begin
if what = 'min' then
select min(price) into temp from goods;
elsif what = 'max' then
select max(price) into temp from goods;
end if;
return temp;
end;
/
 
create or replace procedure p1
as
maxp number;
minp number;
begin
select max(price) into maxp from goods;
select min(price) into minp from goods;
dbms_output.put_line('min = ' ||minp || ' max = ' ||maxp);
end;
/

create or replace function f1(what varchar2) return number
as
temp number;
begin
if what = 'min' then
select min(price) into temp from goods;
elsif what = 'max' then
select max(price) into temp from goods;
end if;
return temp;
end;
/

ошибки все же еще есть(((
 
Какие ошибки?
 
мдя... ну и основы...
create or replace procedure p1
as
maxp number(28,6);
minp number(28,6);
begin
select max(price), min(price)
into maxp, minp
from goods;
dbms_output.put_line('min = ' ||minp || ' max = ' ||maxp);
end;
/

create or replace function f1(what varchar2) return number
as
temp number(28,6);
begin
if lower(what) = 'min' then
select min(price) into temp from goods;
elsif lower(what) = 'max' then
select max(price) into temp from goods;
end if;
return temp;
end;
/

так наверное лучче :) А то кто его знает - что там за цены и в чем...
 
>так наверное лучче А то кто его знает - что там за цены и в чем...
чем лучше?

to TC:
таблица goods с полем price есть на схеме?
 
Лучше тем, что как-то конкретизирует параметры дробных переменных + решает ситуацию, когда передается вид экстремального значения в разных регистрах + если не ошибаюсь, select min(a), max(a) выполняется в один проход, в отличие от двух запросов подряд ;)
Кстати, надо было бы в if добавить:
else
return null;
end if;
 
решалась проблема внести минимальные изменения в код автора для исправления ошибок

>Кстати, надо было бы в if добавить:
>else
>return null;
>end if;
не надо
 
Почему же не надо? Вроде как не рекомендуется возвращать неинициализированную переменную из функции. А в случае, если в ф-цию передадут левое значение параметра what - то как раз и произойдет возврат неинициализированной переменной temp :)
 
в PL/SQL по умолчанию локальные переменные инициализируются значением NULL
 
вполне вероятно :)
Но по-моему все же рекомендуется не возвращать не инициализированные явно переменные. Может это просто хороший тон конечно... Вобщем, в предложении двумя постами выше слово "нужно" необходимо заменить на "стоит" :) Пусть так.
 
Назад
Зверху Знизу