2016-11-14 14 views
0

時間がかかりましたが、なぜこれが赤で強調表示されているのかわかりません。MySQLのストアドファンクション構文エラー

CREATE FUNCTION Student_Section_Count(StudentID INT) 

Returns INT 

Begin 

DECLARE section_Registred INT; 

SET section_Registred= (Select COUNT(DISTINCT Section.ID) as 'Students Registration Count' 

FROM Section 
Inner Join 
Registration on registration.StudentID=Section.ID 

Where registration.StudentID=StudentID); 

Return Section_Registred; 

END$$ 

Delimiter; 

それはまあ、私は自分自身でそれを考え出したと思いENDと区切り記号だけでなく、戻りINT

答えて

0

デフォルトでは、セミコロン;はmysqlの区切り文字です。したがって、mysqlクライアントを使用する場合、サーバに渡される関数定義は最初のセミコロンまで、つまりDECLARE section_Registred INT;までです。関数の定義の残りの部分はサーバーに渡されません。これによりエラーが発生します。関数定義にセミコロンを組み込むには、区切り文字をセミコロンから他のものに変更する必要があります。関数を定義する前に、デリミタを変更するために以下のSQLを書く:

DELIMITER $$

上記のsqlの後に、関数用のsqlを書き込みます。関数の定義の最後に、新しい区切り文字$$ENDに追加します。関数の定義全体が、新しい区切り文字までサーバーに渡されます。これにより、エラーが修正されます。関数の定義が次のように終了したら、デリミタをデフォルトに戻します。

DELIMITER ;

また、関数定義のどこにも存在しない区切り記号を選択することを忘れないでください。

0

からINTを強調しています。

DELIMITER $$ 

CREATE FUNCTION Student_Section_Count(StudentID INT) 

Returns INT 

Begin 

DECLARE section_Registred INT; 

SET section_Registred= (Select COUNT(DISTINCT Section.ID) as 'Students Registration Count' 

FROM Section 

Inner Join 

Registration on registration.StudentID=Section.ID 

Where registration.StudentID=StudentID); 

Return Section_Registred; 

END$$