4

このストアド プロシージャに値を渡す正しい方法は何ですか?


DELIMITER $$

    CREATE DEFINER=`root`@`localhost` PROCEDURE `drop_student`(IN section_id VARCHAR(20), IN student_id  VARCHAR(20))
    BEGIN

    SET @section_id=section_id;
    SET @student_id=student_id; 

    PREPARE STMT2 FROM 
    "DELETE FROM transcript
    WHERE STUDENT_ID = @student_id
    AND SECTION_ID = @section_id ";


    PREPARE STMT FROM 
    "DELETE FROM course
    WHERE STUDENT_ID = @student_id
    AND SECTION_ID = @section_id ";


    EXECUTE STMT2 USING @section_id,@student_id;

    EXECUTE STMT USING @section_id,@student_id;

    END
4

4 に答える 4

3

上記のコードでSQL Server(タグが表示sql serverされます )を使用していますか? だと思いMySQLます。このようにしてください

PREPARE STMT2 FROM  "DELETE FROM transcript  WHERE STUDENT_ID = ? AND 
                                                   SECTION_ID = ?";
EXECUTE STMT2 USING @student_id,  @section_id;
DEALLOCATE PREPARE STMT2;

-- same as STMT

プリペアド ステートメントの SQL 構文

于 2012-08-31T01:21:41.943 に答える
1

プロシージャを呼び出すには、次のようにします。

CALL drop_student('foo','bar');

于 2012-08-31T01:31:06.840 に答える
0

これを試してみましたか?

EXEC STMT2 @section_id @student_id;

EXEC STMT @section_id @student_id;
于 2012-08-31T01:14:16.467 に答える
0

ここでは準備済みステートメントを使用する必要はありません。実際、2 つのDELETEステートメントを 1つのステートメントに結合することもできます。

CREATE PROCEDURE drop_student (
  IN p_section_id VARCHAR(20),
  IN p_student_id VARCHAR(20)
)
DELETE transcript, course
FROM   transcript JOIN course USING (STUDENT_ID, SECTION_ID)
WHERE  STUDENT_ID = p_student_id AND SECTION_ID = p_section_id;

さらに、オプションを使用して外部キー制約によって自動的に提供される動作を手動で実装しようとしているようです。ON DELETE CASCADE

于 2012-08-31T04:25:17.127 に答える