2017-02-28 185 views
1

我在MySQL中有一個存儲過程的問題。我想通過傳遞ID參數來獲得單行,但是,似乎SP忽略了WHERE過濾器並顯示了表中的所有列。如何通過MySQL存儲過程中的ID獲得一行?

我覺得奇怪的是,如果我在存儲過程以外的查詢中傳遞id的特定值(例如1003),將返回預期結果。

對不起,如果我的錯誤是愚蠢的,我是新手。

表結構是這樣的:

CREATE TABLE Paciente 
(
    ID INT AUTO_INCREMENT NOT NULL, 
    DNI CHAR(8) UNIQUE NULL, 
    Nombre NVARCHAR(70) NOT NULL, 
    Apellido_Paterno NVARCHAR(30) NOT NULL, 
    Apellido_Materno NVARCHAR(30) NOT NULL, 
    Edad TINYINT NOT NULL, 
    Sexo CHAR(1) NOT NULL, 
    Calle NVARCHAR(50) NULL, 
    Numero_Domicilio SMALLINT(4) NULL, 
    Telefono NVARCHAR(8) NULL, 
    Movil NVARCHAR(10) NULL, 
    Estado_Civil NVARCHAR(20) NULL, 
    Ocupacion NVARCHAR(30) NULL, 
    Fecha_Registro DATETIME DEFAULT CURRENT_TIMESTAMP, 
    Estado BOOLEAN NULL DEFAULT TRUE, 
    PRIMARY KEY(ID) 
)ENGINE = InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1000; 


Stored Procedure: 

DELIMITER $$ 
CREATE PROCEDURE `buscarPaciente`(IN id INT) 
BEGIN 
SELECT * FROM Paciente WHERE ID = id LIMIT 1; 
END 
$$ 
DELIMITER ; 
+1

你是指列還是行? – artm

+0

只有一個記錄 –

+0

噢,對不起,我的錯誤。 –

回答

1

行爲由命名輸入參數相同作爲列名引起的,因此MySQL不能柱和where子句中的參數之間進行區分。將輸入參數重命名爲param_ID,它將返回具有請求的ID值的記錄。

DELIMITER $$ 
CREATE PROCEDURE `buscarPaciente`(IN param_ID INT) 
    BEGIN 
     SELECT * FROM Paciente WHERE ID = param_ID LIMIT 1; 
    END 
$$ 
DELIMITER ; 
+0

嘿,非常感謝你,你是對的,那已經解決了我的問題。現在它的作品! 非常感謝。 –