0
私のデータベースのstudentテーブルに2つの列を作成しました。今私は学生テーブルのカーソルを作成する必要があります。私は、カーソルクエリの結果をフィルタリングするために、生徒IDと生徒IDの入力パラメータを使用する必要があります。 作成したカーソルを開いて、生徒に電子メールが割り当てられているかどうかを確認する必要もあります。電子メールが割り当てられていない場合は、電子メール列を更新して、電子メールを学生に割り当てる必要があります。ケースの文を書く手助けが必要です - MySQLカーソル
最後に私は助けが必要な理由: 私はこのカーソルのcase文をどのように書くのか分かりません。私はこれを行う良い方法を考えようとしましたが、成功しませんでした。助けてください!!
DELIMITER $
DROP PROCEDURE IF EXISTS CURSOR_DEMO$
CREATE PROCEDURE CURSOR_DEMO(start_student_id INT
,end_student_id INT
)
BEGIN
DECLARE l_table_name VARCHAR(50);
DECLARE iam_done INT DEFAULT 0;
DECLARE l_sql_stmt VARCHAR(5000);
SET @l_sql_stmt='ALTER TABLE STUDENT ADD EMAIL VARCHAR';
SELECT @l_sql_stmt;
prepare stmt from @l_sql_stmt;
execute stmt;
SET @l_sql_stmt='ALTER TABLE STUDENT ADD PHONE int(10)';
SELECT @l_sql_stmt;
prepare stmt from @l_sql_stmt;
execute stmt;
DECLARE TBL_CUR CURSOR FOR
SELECT EMAIL FROM STUDENT.TABLES WHERE TABLE_SCHEMA='MYSQLDB';
BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET IAM_DONE=1;
OPEN TBL_CUR;
tbl_loop:LOOP
FETCH tbl_cur INTO l_table_name;
IF IAM_DONE = 1 THEN
LEAVE tbl_loop;
END IF;
CASE WHEN l_table_name = 'STUDENT' THEN
ELSE BEGIN END;
END CASE;
END LOOP tbl_loop;
CLOSE TBL_CUR;
END;
END$
DELIMITER ;
カーソルは最後の手段です。可能であれば、カーソルではなく更新ステートメントを使用する必要があります。 –
こんにちは、返信いただきありがとうございます。電子メールは列であり、表ではありません。そして私は電子メールと電話のための列を作成するためにalterを使いました。 –
正直言って、以下の理由から、この手順で達成しようとしていることを理解できませんでした: - 変更ステートメントを含めるということは、この手順を再利用できないことを意味します。プロシージャは構文ではありません(すべての宣言はbeginブロックの先頭になければならず、tbl_cursor宣言はありません)。カーソルへの選択は意味をなさないものです。私はまた、あなたが生徒の記録を更新するためにメールアドレスを取得していた場所を見ることができませんでした。あなたが持っているテーブルとあなたが望む出力を公開しておけば助けになるかもしれません。 –