0

基本的に、私は学生がコースを登録/ドロップするたびにこの手順を実行します。コース内のstudent_total=学生数を設定し、対応するセクションを(student_total + 1)で更新しようとしています。ストアドプロシージャの適切なドキュメントを見つけるのに問題があります。回線でエラーが発生していDeclare student_total int;ます。私は何を正しくやっていないのですか?

DELIMITER $$

CREATE PROCEDURE `mydb`.`update_seats` (IN section_ID varchar(20))
BEGIN

SET @section_id=section_id;

DECLARE student_total int;
-- count the number of students in the course --

SET student_total = SELECT count(student_ID) from course
WHERE section_ID = @section_id;


Update Section SET students_enrolled = (student_total + 1) 
WHERE section_ID = @section_id;




END
4

2 に答える 2

2

問題

エラー1

MySqlドキュメントから:

DECLAREは、BEGIN ... END複合ステートメント内でのみ許可され、他のステートメントの前に開始する必要があります。

DECLARE...したがって、ステートメントの前にステートメントを移動する必要がありますSET @section_id...

エラー2

無効なsnytaxを使用して変数に値を選択しようとしています!(これは無効な構文です)SELECT ... INTOの代わりに使用する必要があります。SET ... = SELECT ...

冗長性の削除

section_IDパラメータ( )をグローバル変数( )に割り当てる必要はありません@section_IDsection.section_ID列との名前の衝突を回避するために、パラメーター名を変更するだけです。

解決

DELIMITER ;;

CREATE PROCEDURE `update_seats` (IN p_section_ID VARCHAR(20))
BEGIN
    DECLARE student_total INT;

    SELECT  count(student_ID)
    INTO    student_total
    FROM    course
    WHERE   section_ID = p_section_ID;

    UPDATE  section
    SET     students_enrolled = (student_total + 1)
    WHERE   section_ID = p_section_ID;
END;;

DELIMITER ;
于 2012-09-02T00:41:35.290 に答える
0

コマンドラインツールを使用していますね

受け取ったエラーメッセージを知っておくと役に立ちますが、投稿したコードに基づいて、BEGIN...ENDブロックの後にdelimiterコマンドをリセットした場所がわかりません。

http://dev.mysql.com/doc/refman/5.1/en/stored-programs-defining.htmlから取得

于 2012-09-02T00:37:53.370 に答える