У меня есть табличка по типу
| Id | Parent_Id | A | B | C
Как мне сделать так, чтобы можно было добавить запись либо с
[Parent_Id = null, а A, B обязаны содержать данные]
, либо
[Parent_id != null, но тогда A = null, B = null]
ну а С
всегда должен содержать данные? Всё что я нашёл это триггеры, но не знаю как их приделать под эту задачу :С
В Oracle я использовал триггеры для проверки нужных мне условий (в случае чего выбрасывал исключения или обрабатывал по своему). Например:
create or replace TRIGGER AVROPO_DML_ACCES_DENIED_04hour
BEFORE
INSERT OR
UPDATE
ON xxx_table
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
CURSOR valid_user_cur IS
select UPPER(login) login from
(SELECT u.login, g.ID, g.NAME nm, g.SHORT_NAME, g.IS_ACTIVE, g.DESCRIPTION, g.id gid, r.CHILD AUTH_USER_ID
FROM auth_group g INNER JOIN cds3_object_relation r ON r.PARENT = g.ID
INNER JOIN auth_user u ON u.ID = r.CHILD
where
g.ID in
('5C30E6DA0224EF88E0531B411B0A4E73')
)a
left join
(select S_ID, OSUSER from (
select userenv('sessionid') s_id from dual )s
left join v$session v
on s.s_id = v.AUDSID
)b
on a.login=b.OSUSER;
TYPE all_user_session IS TABLE OF valid_user_cur%ROWTYPE
INDEX BY PLS_INTEGER;/*объявление типа и привязка ниже строкой к переменной для работы с коллекцией*/
vuc all_user_session;
avr_user VARCHAR2(30);
flag BOOLEAN;
no_acces EXCEPTION;
BEGIN
avr_user:= AVROPO.avr_get_usr();
OPEN valid_user_cur;
LOOP
FETCH valid_user_cur BULK COLLECT INTO vuc;
flag := false;
IF (vuc.count > 0) THEN
/*перебираем элементы коллекции*/
FOR i IN vuc.first .. vuc.last
LOOP
IF (vuc(i).login = avr_user)
THEN flag := true;
END IF;
EXIT WHEN flag=true;/*выход сразу если доступ есть (+цикл фор оптимизирован для bulk collect)*/
END LOOP;
/*конец перебора*/
END IF;
EXIT WHEN valid_user_cur%NOTFOUND;
END LOOP;
IF (TRUNC(SYSDATE) >= :old.date$) AND (flag=false) THEN RAISE no_acces; END IF;
IF (TRUNC(SYSDATE) >= :new.date$) AND (flag=false) THEN RAISE no_acces; END IF;
EXCEPTION
WHEN no_acces THEN raise_application_error (-20069,'У вас недостаточно прав на внесение изменений за данный промежуток времени!');
CLOSE valid_user_cur;
END;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Есть сайт для которого нужно сделать английскую версиюПроблема в том, что он уже почти реализован, и новую локализацию так просто не впихнуть
Нахожусь на этапе сбора данных для обучения свой нейронной сети, данные собираю в виде MySQL таблицыУ меня есть статьи на разные категории такие...
Пишу программу которая показывает какие дополнительные уроки посещает ученик, вот сущности
В большинстве руководств, рекомендуют всем родительским елементам задавать классы, но при этом рекомендуют использовать не более двух селекторов...