Sql обновляет столбец при каждой вставке строки

#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 ...