Avatar billede hakio Novice
16. marts 2004 - 02:13 Der er 1 kommentar og
1 løsning

CHECK and Subselect, how to combine when not allowed?

I create the following 2 relation's :

CREATE TABLE Vark (
varkNavn VARCHAR(30),
genre VARCHAR(20) NOT NULL,
stilart VARCHAR(20) NOT NULL,
kompositionsAr INT NOT NULL,
PRIMARY KEY (varkNavn));

CREATE TABLE Indspilning (
komponistNavn VARCHAR(30),
varkNavn VARCHAR(30),
indspilningsAr INT CHECK (indspilningsAr >= (SELECT kompositionsAr from Vark where Vark.varkNavn = varkNavn)),
indspilningsSted VARCHAR(30),
varighed DOUBLE PRECISION NOT NULL,
PRIMARY KEY (komponistNavn, varkNavn, indspilningsAr, indspilningsSted),
FOREIGN KEY (varkNavn) REFERENCES Vark(varkNavn)
ON DELETE CASCADE
ON UPDATE CASCADE);

This gives me :
"cannot use subselect in CHECK constraint expression"

I read somewhere that by creating a function and using that in the CHECK instead it would work... so tried that:

CREATE FUNCTION getKompositionsAr(text) RETURNS integer AS 'SELECT kompositionsAr from Vark where varkNavn = $1' LANGUAGE 'sql';

and retrieving the kompositionsAr by :
CHECK (indspilningsAr >= (SELECT getKompositionsAr('Numb'));

But this gives the same error...

How do I come around this !? Can it be solved or is there a better way...?

(svar bar på dansk :-) )
Avatar billede luttichau Nybegynder
20. marts 2004 - 23:14 #1
Hvad med at bruge en assertion i stedet så er du også fri for at man kan omgå den ved at lave en ændre i tabellen du laver din sub select på?

mvh
Avatar billede hakio Novice
09. november 2004 - 23:46 #2
hmm
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester