0

現在、受講しているオンラインクラスの目標に問題があります。目的はこれより下です。私が使用しているコードと私が受け取っているエラーはそれより下になります。

変数を使用して、「AddNewAlbum」というプロシージャを記述します。このプロシージャは、少なくとも2つのパラメータ(NameOfArtistとAlbumName)を取ります。手順は次のとおりです。

1.ArtistテーブルからArtistIDを検索します。アーティスト名はNameOfArtistです。

2.手順1で見つかったArtistIDとAlbumNameパラメータを使用して、新しい行をアルバムに挿入します

今のところ、この手順を実行する前にアーティストが存在すると想定しても安全です(つまり、AddNewAlbum('Bob Dylan'、'Street Legal')を呼び出すと、「BobDylan」はArtistテーブルにすでに存在します。

CREATE PROCEDURE AddNewAlbum (
NameOfArtist varcahr(50),
AlbumName varchar(50)
)
BEGIN
SELECT ArtistID, ArtistName FROM Artists
WHERE ArtistName = 'NameOfArtist';

INSERT INTO Albums (Title)
VALUES (AlbumName);
END;
//

CALL AddNewAlbum (
"Bob Dylan",
"Street Legal"
);
//

エラー1364(HY000):フィールド'ArtistID'にデフォルト値がありません

^私が受け取るエラーです。誰かが私が間違っていることを見ることができますか?WHERE ArtistName='NameOfArtist';の周りを引用してみました。しかし、これは機能しませんでした。

アーティスト名とArtistIDを取得しているが、アルバムに新しい行を追加していないことを追加したいと思います。

4

2 に答える 2

2

INSERT INTO...SELECTこれについてステートメントを使用できます。

DELIMITER $
CREATE PROCEDURE AddNewAlbum 
(
    @NameOfArtist varchar(50),
    @AlbumName varchar(50)
)
BEGIN
    INSERT INTO Albums (ID, Title)
    SELECT  ArtistID, @AlbumName AS Title
    FROM    Artists
    WHERE   ArtistName = @NameOfArtist;
END $
DELIMITER ;
于 2013-01-02T10:24:47.877 に答える
1

コードをご覧ください。その中にスペルミスがあります。varcharNameOfArtistのスペルが間違っています。

CREATE PROCEDURE AddNewAlbum (
NameOfArtist varcahr(50),
AlbumName varchar(50)
)

試して修正してください。

于 2013-01-02T10:30:55.413 に答える