#oracle
#Oracle
Вопрос:
Я хочу, чтобы каждый раз, когда данные вводятся в таблицу oracle, дата и время должны автоматически обновляться в одном из столбцов с именем ‘CREATION_DATE’.
Комментарии:
1. Этого можно достичь, используя либо значение SYSDATE по умолчанию, либо триггер, который гарантирует, что оно заполнено. Правильный ответ будет зависеть от ваших конкретных потребностей и кода. Например, значение по умолчанию может быть переопределено, если во вставке явно указано значение NULL.
Ответ №1:
Установка значения SYSDATE по умолчанию более эффективна, чем триггер. Как упоминалось в helpc, значение по умолчанию может быть переопределено, если во вставке явно указано значение NULL. Если вы вообще не собираетесь передавать дату-время через приложение, вы можете определить столбец как NOT NULL с значением по умолчанию sysdate .
Комментарии:
1. И как значение по умолчанию помогает при обновлениях?
2. Да, я использовал функциональность SYSDATE. Это более эффективно и меньше ломает голову. Спасибо
3. Однако я также хотел бы знать, можно ли также учитывать время?
4. Спасибо @a_horse_with_no_name за ваш комментарий! snigdha — столбец типа ‘date’ также содержит время. Измените ‘nls_date_format’ в вашем сеансе sql_plus, и вы сможете это увидеть. SQL> alter session set nls_date_format = ‘ДД-ПН-ГГГГ ЧЧ24: MI:SS’; Как справедливо указал a_horse_with_no_name, вы не можете автоматически обновлять временную метку для последующих изменений в этой строке. Вам потребуется иметь еще один столбец аудита ‘modified_date’, который вы могли / должны указывать в системе во время обновлений. Однако следует избегать срабатываний.
Ответ №2:
Триггер будет делать то, что вы хотите. Я думаю, что что-то вроде этого — это то, что вы ищете:
CREATE OR REPLACE TRIGGER date_trigger
AFTER INSERT ON your_table
FOR EACH ROW
WHEN (new.your_table> 0)
BEGIN
:NEW.CREATION_DATE:= SYSDATE;
END;
/
В зависимости от ваших потребностей я обычно предпочитаю добавлять столбцы create_date и update_date, чтобы получать временные метки для изменений, которые могут произойти позже.
Комментарии:
1. Как вы записываете временную метку
delete
мысли? (Без этого вся концепция логически несовместима сама с собой.) Я хочу сказать, зачем вам нужно отслеживать эту информацию?