Mysql 将可选参数添加到存储过程中,如果我没有传递该参数,则必须获取所有详细信息

Mysql 将可选参数添加到存储过程中,如果我没有传递该参数,则必须获取所有详细信息,mysql,stored-procedures,Mysql,Stored Procedures,我想在存储过程中添加一个可选的param,如果我使用可选的param调用该存储过程,则应获取相关的输出,如果在调用中未传递param值,则应获取所有值 我已经试过了,学生的分数应该是可选的,如果我在param中通过了90分,那么所有科目都有90分的学生应该被录取。。如果我只通过学生姓名,那么所有科目都有分数的学生将被录取 DELIMITER $$ DROP PROCEDURE IF EXISTS students_details $$ CREATE PROCEDURE students_deta

我想在存储过程中添加一个可选的param,如果我使用可选的param调用该存储过程,则应获取相关的输出,如果在调用中未传递param值,则应获取所有值

我已经试过了,学生的分数应该是可选的,如果我在param中通过了90分,那么所有科目都有90分的学生应该被录取。。如果我只通过学生姓名,那么所有科目都有分数的学生将被录取

DELIMITER $$
DROP PROCEDURE IF EXISTS students_details $$
CREATE PROCEDURE students_details(IN name INT(11), IN marks CHAR(20))
  BEGIN 
    SELECT 
      student_name,
      student_id,
      subject_name,
      student_marks
    FROM students 
    where student_name = name (declared in param)
    and student_marks =  marks (optional param); 

  END $$
DELIMITER ;
所需输出:如果我运行call students_details('john',80),则必须获取john的详细信息(john在科目中有80分)


如果我运行call students_details('john')only john作为第一个参数,那么输出应该是john的带有标记的所有主题。

输入应该包括所有参数(必需)。因此,对于可选选项,您可以使用(“”),如
呼叫学生\u详细信息('john',“”)


您有什么特别的问题吗?我不熟悉存储过程的概念。。如果我没有传递第二个参数,那么应该获取所有详细信息..我如何处理..您需要在call语句中传递这两个参数,否则错误1318(42000):过程sandbox.p的参数数量不正确;期望2,得到1,这样你就可以通过一些你可以测试的东西。
DELIMITER $$
DROP PROCEDURE IF EXISTS students_details $$
CREATE PROCEDURE students_details(IN name INT(11), IN marks CHAR(20))
  BEGIN 

IF(marks='') THEN
    SELECT 
      student_name,
      student_id,
      subject_name,
      student_marks
    FROM students 
    WHERE student_name = name;
ELSE
SELECT 
      student_name,
      student_id,
      subject_name,
      student_marks
    FROM students 
    WHERE student_name = name 
    AND student_marks =  marks; 
END IF;
  END $$
DELIMITER ;