Мне нужно добавить столбец permissions, который определяется столбцами roles и access. Я пытаюсь вложить циклы if, но возникает ошибка

Код, который я использую, выглядит следующим образом
СОЗДАТЬ ТАБЛИЦУ EMPLOYEE ( empId INTEGER PRIMARY KEY, username TEXT NOT NULL, userrole TEXT NOT NULL, roles TEXT NOT NULL, доступы TEXT NOT NULL );

INSERT INTO EMPLOYEE VALUES (0001, 'Clark','President', 'Admin','privileged');
INSERT INTO EMPLOYEE VALUES (0002, 'Dave','sales rep', 'Operational role','not privileged');
INSERT INTO EMPLOYEE VALUES (0003, 'Ava','finance manager', 'Managerial role','privileged');

SELECT * FROM EMPLOYEE;

ALTER TABLE EMPLOYEE
ADD COLUMN permissions VARCHAR;

DO
$do$
BEGIN
IF EMPLOYEE.roles='Admin' THEN
  IF EMPLOYEE.accesses='privileged' THEN
    SET permissions = 'GRANTED';
      
else
  IF EMPLOYEE.roles='Operational role' THEN
    IF EMPLOYEE.accesses='not privileged' THEN
      SET permissions = 'GRANTED';
      
else
  IF EMPLOYEE.roles='Managerial role' THEN
    IF EMPLOYEE.accesses='not privileged' THEN
      SET permissions = 'GRANTED';
      
  else
  SET permissions = 'REVOKED';
END IF;
END
$do$;

SELECT * FROM EMPLOYEE;

Нужно ли вам это:

SELECT *,
       CASE WHEN (roles, accesses) IN ( ('Admin','privileged'),
                                        ('Operational role','not privileged'),
                                        ('Managerial role','not privileged') )
            THEN 'GRANTED'
            ELSE 'REVOKED'
            END AS permissions 
FROM employee;

?

Вернуться на верх