請有人啓發我如何創建具有60的上限和20的下限的觸發器。我正在處理一項任務,該任務需要限制運輸的員工年齡範圍公司在oracle 11g上。謝謝爲出生日期創建觸發器
回答
不要使用觸發器來強制關係完整性,使用約束。這就是他們的目的。
你沒有爲自己提供表結構而煩惱,所以你需要爲你的實際表調整它。
alter table employees
add constraint minimum_age_ck check
(hire_date >= add_months(date_of_birth, 240);
alter table employees
add constraint maximum_age_ck check
(hire_date <= add_months(date_of_birth, 720);
當然,如果你的employees
表缺少一個hire_date
列你有一個很大的問題。
偉大的解決方案。 *不要使用觸發器*總是要走的路! – haki
@APC由於員工可能在公司有多個僱傭期,無論如何,僱傭日期可能應該在不同的表中。 –
謝謝。我終於用這個
alter table staff
add constraint minimum_age_ck check
((dateOfBirth >= add_months(dateOfBirth, -18)));
這
alter table staff
add constraint maximum_age_ck check
((dateOfBirth <= add_months(date_of_birth, 60)));
將嘗試插入值和檢查約束是有效的。
同時通過插入值檢查上述答案證明它是無效的。我也試過使用這個 ALTER TABLE STAFF ADD CONSTRAINT minimum_age_ck CHECK((months_between(sysdate,dateOfBirth)> = 240)); CHECK((MONTHS_BETWEEN(SYSDATE,DATEOFBIRTH)> = 240)) * ERROR位於第3行: ORA-02436:在CHECK約束錯誤地指定的日期或系統變量
是SYSDATE不是MONTHS_BETWEEN有效可用比較?
您無法在檢查約束中使用sysdate。正如我對你的問題所評論的那樣,檢查約束只在數據改變時被評估,因此你不能在約束中使用sysdate,因爲不能保證所有的數據都通過約束。在你的代碼中,如果列名爲「date_of_birth」,什麼是「dateOfBirth」?如果它們是相同的,那麼你的第一個約束就是說出生的雛形必須比它自身始終的18個月大,而且在60個月之後不到60個月,而這始終也是。這種做法都是錯誤的。 –
謝謝大衛阿爾德里奇。它如何構建以實現上述檢查? – user2282435
- 1. 如何創建觸發器以將日期時間拆分爲日期
- 2. SQL orcl10g觸發器插入(出生日期後的死亡日期)
- 3. cassandra觸發器創建期間的java.lang.NoClassDefFoundError
- 4. Jenkins Gerrit觸發器和定期創建
- 5. Linux進程產生/創建觸發器
- 6. 創建在SQL Server中比較日期的觸發器
- 7. MySQL - 在插入之前創建觸發器來替換日期
- 8. 所有包含創建日期的表的Postgresql觸發器
- 9. 根據日期創建事件觸發器
- 10. 創建觸發器
- 11. 創建觸發器
- 12. 創建觸發器
- 13. 創建觸發器
- 14. 爲什麼在創建觸發器時發生錯誤?
- 15. 爲什麼MySQL在創建觸發器時發生此錯誤?
- 16. MySQL:如何創建設置新行的創建日期的觸發器
- 17. ORA-04091創建觸發器時出錯
- 18. 創建觸發器時出錯
- 19. 觸發器創建給出了錯誤
- 20. JSF:如何創建自定義驗證器到出生日期?
- 21. SQL到期日期觸發器
- 22. 如何使用mysql爲表日誌創建觸發器?
- 23. 爲「插入前」創建觸發器
- 24. 如何爲mysql 5.5.44創建觸發器?
- 25. MySQL爲選擇列創建觸發器
- 26. 爲MYSQL觸發器創建查詢
- 27. 爲SQLAgentMail創建插入觸發器
- 28. 爲高速列創建觸發器
- 29. 如何創建觸發器以便在發生空值時發出消息
- 30. Sql創建觸發器
這將是很高興看到你已經嘗試過什麼,你有什麼問題,但它是星期五(謝謝你),我感到慷慨,所以[這個答案](http://stackoverflow.com/a/12364681/266304)應該給你一個很好的起點。 –
由於年齡變化而數據並未發生變化,因此您無法對出生日期的上限作爲觸發條件實施有意義的限制。因此,人們變成60歲,沒有失職提出。換句話說,這裏教的是語法(可以從手冊中獲得),而不是任何類型的軟件開發方法。 –