web-dev-qa-db-ja.com

エラーコード:1136。列数が行1の値数と一致しません

ここで苦労しています。これは私のコードです

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 ;
0
nbk

から変更する

SELECT @countryname FROM(SELECT @countryname AS countryName、@nationality AS countryity、@countryprefix AS countryPrefix

SELECT
    @countryname AS countryName,
    @nationality AS nationality,
    @countryprefix AS countryPrefix
0
Mo64