2017-04-03 2 views
1
DROP PROCEDURE IF EXISTS STUDENTS_BY_STATUS; 

DELIMITER // 

CREATE PROCEDURE STUDENTS_BY_STATUS(status VARCHAR(10)) 

BEGIN 

    SELECT BannerId, Name FROM STUDENT WHERE Status=status; 

END // 

DELIMITER ; 

CALL STUDENTS_BY_STATUS("Freshman"); 

My Table (Student) enter image description hereWarum gibt meine SQL-Prozedur die gesamte Tabelle zurück?

Mein Ergebnis

enter image description here

Antwort

3

Rufen Sie Ihren Parameter mit einem anderen Namen, wie Sie Spalte mit dem Namen Status in der Tabelle haben.

Ich folge normalerweise der Konvention p_ Präfix für Parameter und v_ für lokale Variablen.

CREATE PROCEDURE STUDENTS_BY_STATUS(p_status VARCHAR(10)) 
BEGIN  
    SELECT BannerId, Name FROM STUDENT WHERE Status = p_status; 
END // 
+0

Vielen Dank! Ich bin mir nicht ganz sicher, warum mein Professor uns gebeten hat, den Parameter als Status zu haben, obwohl er diesen Konflikt kennen muss. –

+0

@KyleJ - Vielleicht hat er dich getestet. ;) – GurV

2
DROP PROCEDURE IF EXISTS STUDENTS_BY_STATUS; 

DELIMITER // 

CREATE PROCEDURE STUDENTS_BY_STATUS(IN statusIn VARCHAR(10)) 

BEGIN 

    SELECT BannerId, Name FROM STUDENT WHERE Status=statusIn; 

END // 

DELIMITER ; 

Mark als IN param und verwenden diffrent Namen für param.

+1

Es ist standardmäßig 'IN'. Es muss nicht explizit angegeben werden – GurV

Verwandte Themen