如果我不能为学生插入笔记,我会创建一个返回true的函数。
CREATE OR REPLACE FUNCTION mineur (note REAL, numeutu INT)
RETURNS BOOLEAN AS $$
SELECT $1 IS NULL OR
SELECT * FROM studiant
WHERE student.numetu = $2 AND
extract(YEAR FROM AGE(birthdate)) > 18;
$$ LANGUAGE SQL;
我写这个函数但是postgresql但我得到了:
错误:SELECT附近的语法错误(关于select * from etudiant)
答案 0 :(得分:1)
问题是你在OR上使用了第二个选择,但SELECTs不是布尔表达式,这让它有点混乱。
SELECT $1 IS NULL OR
SELECT * FROM studiant
第一点令人困惑。我假设如果音符为空,则您希望返回TRUE。所以像这样的查询:
CREATE OR REPLACE FUNCTION mineur (note REAL, numeutu INT)
RETURNS BOOLEAN AS
$$
SELECT
($1 IS NULL) OR
EXISTS(SELECT * FROM studiant
WHERE studiant.numetu = $2 AND
extract(YEAR FROM AGE(birthdate)) > 18)
$$
LANGUAGE SQL;
我在这里使用EXISTS来确定是否存在符合条件的行。
这样的影响是: