у меня есть ошибка в моем синтаксисе sql по Дублирующейся записи '' для ключа 'ПЕРВИЧНЫЙ' - PullRequest
1 голос
/ 25 апреля 2020

это мой запрос

CREATE TABLE buku(
    kd_buku VARCHAR(5) PRIMARY KEY,
    judul_buku VARCHAR(60),
    kd_karang VARCHAR(5),
    kd_terbit VARCHAR(5),
    jumlah INT
);

INSERT INTO buku VALUES
('21','kalkulus','10','1',10),
('22','Metode Numerik','11','2',20),
('23','Sistem basis data','12','3',40),
('24','Pengantar Teknologi Informasi','12','3',41);

DELIMITER //
CREATE PROCEDURE ubahbuku
(IN kd_buku VARCHAR(5), IN judul_buku VARCHAR(60), IN kd_karang VARCHAR(5), IN kd_terbit VARCHAR(5), jumlah INT)
BEGIN
UPDATE buku SET kd_buku=@kd_buku, judul_buku=@judul_buku, kd_karang=@kd_karang, kd_terbit=@kd_terbit, jumlah=@jumlah;
END//
DELIMITER ;

CALL ubahbuku('24','sosiologi','10','1',30);

У меня проблема при вызове функции ubahbuku Дублирующая запись '' для ключа 'PRIMARY' Можете ли вы мне помочь?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Как уже указывалось в комментариях, обновление вашего pro c не имеет условия WHERE, поэтому он попытается обновить каждую запись в таблице с тем же значением входящего первичного ключа. Вместо этого добавьте предложение WHERE в обновление, чтобы указать одну запись по первичному ключу kd_buku. Попробуйте использовать эту версию вашей хранимой процедуры:

DELIMITER //
CREATE PROCEDURE ubahbuku
(IN p_kd_buku VARCHAR(5), IN p_judul_buku VARCHAR(60), IN p_kd_karang VARCHAR(5), IN p_kd_terbit VARCHAR(5), p_jumlah INT)
BEGIN
    UPDATE buku
    SET judul_buku = p_judul_buku, kd_karang = p_kd_karang, kd_terbit = p_kd_terbit, jumlah = p_jumlah
    WHERE kd_buku = p_kd_buku;
END//
DELIMITER ;
0 голосов
/ 25 апреля 2020

Вы пытаетесь вставить значение 24 для первичного ключа (kd_buku) с помощью процедуры, которая уже вставлена ​​с использованием этого оператора. По этой причине он выдает ошибку повторяющегося ввода.

INSERT INTO buku VALUES
('24','Pengantar Teknologi Informasi','12','3',41);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...