Вы можете добавить виртуальный столбец в вашу таблицу (Виртуальный столбец: « значения получены, а не сохранены »), например,
Таблица и данные
create table products ( productstandardprice number( 6, 2 ) ) ;
insert into products ( productstandardprice )
select level * 199.99
from dual
connect by level <= 5 ;
Запрос
SQL> select * from products ;
PRODUCTSTANDARDPRICE
--------------------
199.99
399.98
599.97
799.96
999.95
ALTER TABLE
alter table products
add (
saleprice number( 6, 2 ) generated always as (
case
when productstandardprice >= 400 then
productstandardprice * .85
else
productstandardprice * .90
end
) virtual
) ;
Тот же запрос, что и раньше ...
SQL> select * from products ;
PRODUCTSTANDARDPRICE SALEPRICE
-------------------- ----------
199.99 179.99
399.98 359.98
599.97 509.97
799.96 679.97
999.95 849.96
ПРОЦЕДУРА
create or replace procedure productlinesale
is
begin
execute immediate '
alter table products
add (
saleprice number( 6, 2 ) generated always as (
case
when productstandardprice >= 400 then
productstandardprice * .85
else
productstandardprice * .90
end
) virtual
)' ;
end ;
/
Procedure created.
-- caution: this needs the "original" table (without the virtual column)
begin productlinesale; end;
/
PL/SQL procedure successfully completed.
Запрос на тестирование
SQL> select
2 productstandardprice
3 , saleprice
4 , round( saleprice / productstandardprice, 2 ) as factor
5 from products
6 ;
PRODUCTSTANDARDPRICE SALEPRICE FACTOR
-------------------- ---------- ----------
199.99 179.99 .9
399.98 359.98 .9
599.97 509.97 .85
799.96 679.97 .85
999.95 849.96 .85
Тестирование с Oracle 11g и 18c. Dbfiddle здесь .