#java #sql #sybase
#java #sql #sybase
Вопрос:
Хорошо, итак, у меня есть эта таблица: VersionsEditor с идентификатором — bigint version — integer дата начала — дата окончания — дата BookID — целое число
Моя проблема: когда я вставляю новую строку для определенной книги, значение конечной даты должно быть «Выполняется». Поэтому я думаю, что у меня не может быть даты в качестве типа столбца.. Логика заключается в том, что когда у меня самая лучшая версия для определенной книги, тогда конечная дата должна быть «В процессе»
Комментарии:
1. Иметь конечную дату как Varchar
2. почему бы не сохранить его просто
NULL
как флаг, который выполняется?, @alex1111
Ответ №1:
Зачем вам использовать столбец даты для статуса? Вместо этого вам нужен другой столбец для статуса. Я мог бы предложить представление:
create view v_book as
select b.*,
(case when startDate is null then 'NotStarted'
when endDate is null then 'InProgress'
else 'Done'
end) as Status
from books
Ответ №2:
Как насчет триггеров (Oracle DB), подобных этому…
CREATE OR REPLACE TRIGGER t
BEFORE
INSERT OR
UPDATE OF salary, department_id OR
DELETE
ON employees
BEGIN
CASE
WHEN INSERTING THEN
DBMS_OUTPUT.PUT_LINE('Inserting');
WHEN UPDATING('salary') THEN
DBMS_OUTPUT.PUT_LINE('Updating salary');
WHEN UPDATING('department_id') THEN
DBMS_OUTPUT.PUT_LINE('Updating department ID');
WHEN DELETING THEN
DBMS_OUTPUT.PUT_LINE('Deleting');
END CASE;
END;
/
Ответ №3:
Дата должна быть датой, а не целым числом или переменной. Если значение «выполняется» заключается в том, что не может быть указана какая-либо дата, тогда просто установите для нее значение null при выполнении. Вы можете запросить его таким образом:
select coalesce( to_char(enddate, 'DD-MM-YYYY') , 'In progress' ) as end_date
from mytable
where ...