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