2017-02-06 6 views
0

私がしようとしているのは、ユーザーロールが1または1に変更され、ForumManagerテーブルからIsDirect値が0であるエントリをすべて削除した場合、すべてのForumIDについて、ForumManagerテーブルに人のエントリを挿入する必要があります。ストアドプロシージャで複数のクエリを書き込む方法

しかし、私はそれを挿入するために、ForumIDを取得し、ループを使ってForumManagerに挿入するために、さらに1つのクエリを実行する必要があります。

私が今までしようとしているのは不完全で、正しくないかもしれません。正しい方法では、ストアドプロシージャ内でループを実行する方法がわかりません。

delimiter // 
CREATE PROCEDURE update_forum_admin (IN user_id INT, IN previous_role INT,IN new_role INT) 
BEGIN 
if(previous_role == 1) 
{ 
    DELETE ForumManager WHERE UserID=user_id AND IsDirect=0 
} 
elseif(new_role == 1) 
{ 
    SELECT ForumID FROM Forum 
    INSERT ForumManager (ForumID,UserID,IsDirect) VALUES (forum_id,user_id,0) 
} 
END// 
delimiter ; 
+0

ELSEIF(NEW_ROLE == 1){INSERT ForumManager(ForumID、ユーザID、IsDirect)フォーラムFROM \t SELECT forum_id、USER_ID、0} –

+0

それはforum_id選択してフォーラムテーブルからUSER_ID両方が、私はドンます」そのテーブルにuser_idがあると動的に表示されます –

+0

動的で何がないのですか? user_id、どこですか? – Milaci

答えて

0

あなたはID_forumとcoursorを宣言し、以下のようなのelseif文の中にそれを繰り返すことができます(あなたはそれが私に知らせて実装する電子の問題を抱えている場合は、擬似コードです):

 CREATE PROCEDURE update_forum_admin (IN user_id INT, IN previous_role INT,IN  new_role INT) 
     BEGIN 
     CURSOR CUR_ID_FORUM 
     IS 
      SELECT ForumID FROM Forum; 

    if(previous_role == 1) 
    { 
     DELETE ForumManager WHERE UserID=user_id AND IsDirect=0 
    } 
    elseif(new_role == 1) 
    { 
      FOR REC_ID_FORUM IN CUR_ID_FORUM 
      LOOP 
      INSERT ForumManager (ForumID,UserID,IsDirect) VALUES (REC_ID_FORUM,user_id,0) 
      END LOOP; 
    } 
    END update_forum_admin ; 
+0

私は感謝を探していますが、中括弧の近くに構文エラーがあります。 –

+1

これは単なる擬似コードです。 – Milaci

+0

このクエリにCURSORを使用する必要はありません。 –

1

の場合user_idからuserIdにパラメータの名前を変更するよりも、Forumテーブルにカラム名user_idがあります。

delimiter // 
CREATE PROCEDURE update_forum_admin (IN userId INT, IN previous_role INT,IN new_role INT) 
BEGIN 
if(previous_role == 1) 
{ 
    DELETE ForumManager WHERE UserID=userId AND IsDirect=0 
} 
elseif(new_role == 1) 
{ 

    INSERT ForumManager (ForumID, UserID, IsDirect) 
    SELECT ForumID, userId, 0 FROM Forum group by ForumID, userId, 0 
} 
END// 
delimiter ; 
+1

あなたは正しいですが、@MohitはPL/SQLの中でクエリ結果を反復する方法を尋ねます。そのために私はそのような解決策を投稿します。 – Milaci

関連する問題