Чтобы добавить виртуальный столбец с выражением регистра для вашей логики:
alter table employees add salary_range varchar2(7)
generated always as (
case when salary > 10000 then 'Good' else 'Average' end
) virtual;
или с необязательными битами синтаксис удален, просто:
alter table employees add salary_range as (
case when salary > 10000 then 'Good' else 'Average' end
);
Table EMPLOYEES altered.
Вы можете указать размер явно, но Oracle может рассчитать его на основе возможных результатов выражения case:
desc employees
Name Null? Type
-------------- -------- ------------
EMPLOYEE_ID NOT NULL NUMBER(6)
FIRST_NAME VARCHAR2(20)
LAST_NAME NOT NULL VARCHAR2(25)
EMAIL NOT NULL VARCHAR2(25)
PHONE_NUMBER VARCHAR2(20)
HIRE_DATE NOT NULL DATE
JOB_ID NOT NULL VARCHAR2(10)
SALARY NUMBER(8,2)
COMMISSION_PCT NUMBER(2,2)
MANAGER_ID NUMBER(6)
DEPARTMENT_ID NUMBER(4)
SALARY_RANGE VARCHAR2(7)
И для проверки сгенерированных значений:
select employee_id, first_name, last_name, salary, salary_range from employees;
EMPLOYEE_ID FIRST_NAME LAST_NAME SALARY SALARY_
----------- -------------------- ------------------------- ---------- -------
100 Steven King 24000 Good
101 Neena Kochhar 17000 Good
102 Lex De Haan 17000 Good
103 Alexander Hunold 9000 Average
104 Bruce Ernst 6000 Average
105 David Austin 4800 Average
...