Page 1 sur 1

Sql, contrainte check(not exists...

Posté : lun. 10 mai 2010, 09:55:01
par P.A. Milan
Bonjour à tous !

Suis dans du Sql récursif !
Et j'aimerai bien ajouter une contrainte pour limiter les occasions de boucle infinie. ..

Et je bute sur la contrainte - pour l'instant en commentaire -
"Compo98_Pas_recursivite_infinie check(not exists(select * from toto))"
Le message est le suivant :
"La condition CHECK de la contrainte *N est incorrecte."

Suis en V5R4 (je veux dire l'AS...)
Une idée ?

*****

create table compo98 (
composant dec(5, 0) not null references piece,
compose dec(5, 0) not null references piece,
note char(50),
constraint Compo98_Pas_doublon_composant_compose unique(composant, compose),
-- constraint Compo98_Pas_recursivite_infinie check(not exists(select * from toto));
constraint Compo98_Exemple_qui_marche check(composant < compose));

contrainte CHECK

Posté : lun. 17 mai 2010, 07:20:15
par cmasse
Bonjour,

une contrainte de vérification (CHECK) ne peux contenir que la syntaxe d'un WHERE de SELECT pas le SELECT tout entier :

Code : Tout sélectionner

- CHECK &#40;DATLIV > DATCMD&#41;

et non

- CHECK &#40;Select * from fichier where DATLIV > DATCMD&#41;

The check-condition is a search-condition except:

* It can only refer to columns of the table
* It cannot reference ROWID or DATALINK with FILE LINK CONTROL columns.
* It must not contain any of the following:
o Subqueries
o Aggregate functions
o Variables
o Parameter markers
o Sequence-references
o Complex expressions that contain LOBs (such as concatenation)
o OLAP specifications
o ROW CHANGE expressions
o Special registers
o User-defined functions other than functions that were implicitly generated with the creation of a distinct type
o The following built-in scalar functions:

ATAN2 DECRYPT_DB ENCRYPT_TDES RAND
CURDATE DIFFERENCE GENERATE_UNIQUE REPEAT
CURTIME DLURLCOMPLETE GETHINT REPLACE
DATAPARTITIONNAME DLURLPATH IDENTITY_VAL_LOCAL ROUND_TIMESTAMP
DATAPARTITIONNUM DLURLPATHONLY INSERT SOUNDEX
DAYNAME DLURLSCHEME MONTHNAME TIMESTAMP_FORMAT
DBPARTITIONNAME DLURLSERVER MONTHS_BETWEEN TIMESTAMPDIFF
DECRYPT_BINARY DLVALUE NEXT_DAY TRUNC_TIMESTAMP
DECRYPT_BIT ENCRYPT_AES NOW VARCHAR_FORMAT
DECRYPT_CHAR ENCRYPT_RC2 RAISE_ERROR WEEK_ISO

(sans texte)

Posté : lun. 17 mai 2010, 09:11:17
par P.A. Milan
Merci Christian !