ここで苦労しています。これは私のコードです
CREATE DEFINER=`****`@*****` PROCEDURE `setCountry`(
IN `countryname` VARCHAR(100) CHARSET utf8mb4,
IN `nationality` VARCHAR(100) CHARSET utf8mb4,
IN `countryPrefix` INT(3)
)
MODIFIES SQL DATA
INSERT INTO country(
countryName,
nationality,
countryPrefix
)
SELECT
@countryname
FROM
(
SELECT
@countryname AS countryName,
@nationality AS nationality,
@countryprefix AS countryPrefix
) AS tmp
WHERE NOT EXISTS
(
SELECT
countryName
FROM
country
WHERE
countryName = @countryname
)
LIMIT 1
そして、私はこの文でコードを実行しようとしています
call ccc.setCountry('Togo', 'Togolese', 228);
表示されるエラーは次のとおりです。
エラーコード:1136。列数が行1の値数と一致しません
あなたは挿入のために3つの列を選択することになっています。
@countrynameとcountryNameは異なる変数です
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `setCountry`(
IN `countryname` VARCHAR(100) CHARSET utf8mb4,
IN `nationality` VARCHAR(100) CHARSET utf8mb4,
IN `countryPrefix` INT(3)
)
MODIFIES SQL DATA
BEGIN
SET @countryname := countryName;
SET @nationality := nationality;
SET @countryprefix := countryPrefix;
INSERT INTO country(
countryName,
nationality,
countryPrefix
)
SELECT
countryname,
nationality,
countryPrefix
FROM
(
SELECT
@countryname AS countryName,
@nationality AS nationality,
@countryprefix AS countryPrefix
) AS tmp
WHERE NOT EXISTS
(
SELECT
countryName
FROM
country
WHERE
countryName = @countryname
)
LIMIT 1;
END$$
DELIMITER ;
から変更する
SELECT @countryname FROM(SELECT @countryname AS countryName、@nationality AS countryity、@countryprefix AS countryPrefix
に
SELECT
@countryname AS countryName,
@nationality AS nationality,
@countryprefix AS countryPrefix