2017-02-28 5 views
1

私はMySQLのストアドプロシージャに問題があります。 IDパラメータを渡して1行を取得したいのですが、SPがWHEREフィルタを無視してテーブルのすべての列を表示しているようです。MySQLストアドプロシージャのIDで行を取得するには?

私が奇妙なのは、1003などのストアドプロシージャ外のクエリでidの特定の値を渡すと、予想される結果が返されるということです。

申し訳ありません私の間違いがばかげば、私は初心者です。

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

お元気です、ありがとう、私の問題を解決しました。今それは動作します! ありがとうございます。 –

関連する問題