Change таблицы T1.Change значения столбца будут разностью открытых и закрытых столбцов (закрытие-открытие).Я пытаюсь выполнить запрос ниже, но появляется ошибка
Ошибка SQL: ORA-00936: отсутствует выражение
insert into T1(change)
values
(
select
case when open<close then close-open
when open>close then close-open
end as change
from T1
order by datetime
);


Если вы хотите заполнить столбцы существующих строк, вы используете оператор update, а не оператор insert. Просто используйте оператор обновления и примените выражение в предложении set:
update t1 set change = close-open;
Однако сохранение производных значений не является хорошей практикой проектирования. Что произойдет, если кто-то или какой-то код обновит один из столбцов компонента и забудет также обновить производный столбец? Таким образом вы можете легко получить противоречивые данные. Лучше всего вычислять производные столбцы во время запроса, а не сохранять их. Просто сделайте это в операторах выбора, которые вы используете при запросе исходной таблицы:
select t1.*,close-open change from t1
Если существует довольно постоянно используемая формула, вы можете добавить в таблицу «виртуальный столбец», который будет применять формулу для вас во время запроса, как если бы значение было сохранено в таблице, хотя это не так - под обложки просто вычисляют формулу при запросе:
alter table t1 add (change number as (close-open) virtual);
Теперь запрос:
select * from t1
Или создайте представление, встраивающее формулу:
create view v1 as select t1.*,close-open change from t1
Теперь запрос:
select * from v1
У вас есть множество вариантов, позволяющих получить производное значение во время запроса, поэтому вам не нужно фактически хранить его в таблице и рисковать несогласованностью данных. Но если вы хотите сохранить его физически, используйте простой оператор update.