Oracle- Check datetime
Honza Pazdziora
adelton na informatics.muni.cz
Úterý Říjen 28 10:08:18 CET 2003
On Mon, Oct 27, 2003 at 07:37:36PM +0100, Kluvanek Martin wrote:
>
> Ked som chcel obmedzit, aby sa nestrkali zaznamy napriklad novsie ako
> SYSDATE.
> Spravil som takyto pokus:
>
> create table EMPLOYEE
> (Birthdate DATE check(BirthDate <= SysDate));
>
> Vysledok je:
> ORA-02436: v kontrolním omezení je chybně definovaná datumová či systémová
> proměnná
>
> Pritom som to pouzil identicky ako v
> http://www.embarcadero.com/news/auditdatevalues.asp
... a přesně o chybě ORA-02436 se v tom článku také píše, spolu se
zdůvodněním.
> Ked tam dam pevny datum, tak to je OK.
> Ked Sysdate, tak to nefunguje.
> Pritom v tom clanku sa bavili jednoznacne o ORACLE.
>
> Som z toho nejaky cely zmateny.
> Viem, ze si to mozem osetrit cez trigger, ale naco, ked by to malo ist i
> cez CHECK..???
>
> Alebo robim niekde chybu?
Ano. Check je statické omezení kladené na hodnoty v tabulkách. Oproti
tomu trigger Vám dovoluje vrátit chybu při akci nad daty. To že Vy
víte, že funkce sysdate je monotónní, ještě neznamená, že to ví
Oracle, a taky to neznamená, že se najednou nestane, že někdo bude
chtít ta data naimportovat do databáze, kde bude sysdate o tři roky
nazpět. Kde by ta samá data už nebyla validní. Test s použitím sysdate
tedy není námět pro check, anýbrž pro trigger.
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
.project: Perl, mod_perl, DBI, Oracle, auth. WWW servers, XML/XSL, ...
Only self-confident people can be simple.
Další informace o konferenci Databases