Тут могла бути ваша реклама
  • Автор теми Автор теми JoyStick 0_o
  • Дата створення Дата створення
Вот что у меня получилось, но там где-то ошибка, помогите найти
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;
/

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

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