I have an oracle table like this:
create table tms_transaction_tbl
(
trans_id number primary key,
location_id number,
trans_date date,
resource_id number,
ts_id number,
max_value number,
booked_units number default 0,
remaining number default (select max_value-booked_units),
booked number not null ,
user_id number,
trans_time timestamp
);
as you can see I tried to set default value of remaining to (max_value-booked_units)
remainging number default (select max_value-booked_units),
but it gives me this error this error
ora-22818:subquery expression not allowed here
You cannot refer to other columns in the DEFAULT expression
Here is the snippet from Oracle Documentation
You can't use a SELECT as a default value, it must be a constant.
If you're using Oracle 11g this is what virtual columns are for. You can't insert into or update them but the provide a pre-calculated column in the database for you.
The syntax is further described in the documentation for the CREATE TABLE statement. If you're not using 11g you can achieve the same logic with a view on top of your table.
If you don't want to use a view or a virtual column then I can only recommend that you do not store this data at all.