Добавьте виртуальный столбец для значений, превышающих - PullRequest
0 голосов
/ 20 сентября 2018

Вопрос: Создайте виртуальный столбец с именем SALARY_RANGE в таблице СОТРУДНИКИ с приведенной ниже логикой.

Если зарплата больше 10000, значение должно отображаться как «Хорошо», иначе значение должно отображаться как «Среднее».

Мой синтаксис:

alter table EMPLOYEES
add column salary_range varchar
(where salary>10000
then salary_range='Good'
else if salary_range='Average') virtual;

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Чтобы добавить виртуальный столбец с выражением регистра для вашей логики:

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
...
0 голосов
/ 20 сентября 2018

Если вы используете Oracle 11g +, то вы можете добавить виртуальный столбец как:

alter table EMPLOYEES
    add column salary_range varchar2(32) as (case when salary > 10000
then salary_range = 'Good' else salary_range = 'Average' end) virtual;

В Oracle, я думаю, я бы обычно включал generated always, поэтому:

alter table EMPLOYEES
    add column salary_range varchar2(32) generated always as
       (case when salary > 10000
             then salary_range = 'Good' else salary_range = 'Average'
        end) virtual;

В более ранних версиях вам нужно было бы добавить реальный столбец и заполнить его, используя update.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...