2017-01-20 2 views
0

学生がマイナーな場合にノートを挿入できない場合は、trueを返す関数を作成します。この関数がSQLで抽出したブール値を返す方法

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の書き込みが、私は得る:

ERROR: Syntax error near SELECT (About the select * from etudiant)

+0

タグでsqlfiddleがあります。 –

答えて

1

問題は、あなたがORで選択秒を使用しているですが、SELECT文は、それを少し混乱しているブール式ではありません。

SELECT $1 IS NULL OR 
SELECT * FROM studiant 

最初のビットは混乱します。私は、ノートがnullの場合は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; 

行がそれが基準に一致存在するかどうかを決定するために存在します。この

効果は以下のとおりです。真

  • 復帰 "ノート" がnullの場合。
  • 戻り値 スタディアントレコードのレコードが存在する場合はtrue、誕生日は18年以上前です。
  • それ以外の場合はfalseを返します。

は、使用しているデータベースとのあなたの質問http://sqlfiddle.com/#!15/a32ee/2

関連する問題