MySQL ストアド プロシージャで IF ステートメントを使用して、実行するアクションを制御できます。構文は次のとおりです。
IF condition THEN ... do something ... END IF;
IF ステートメントの条件は、CASE ステートメントの条件と同様にすることができます。詳細については、MySQL の Web サイトを参照してください。
挿入を実行した後に、自動インクリメント ID を取得することもできます。次のクエリを使用してください。
SELECT LAST_INSERT_ID() into artist_id;
このプロジェクトでは、AddAlbum という新しいプロシージャを作成します。NameOfArtist と AlbumName の少なくとも 2 つのパラメーターが必要です (最後のプロジェクトと同様)。
この手順では、Artists テーブルをチェックして、NameOfArtist が存在するかどうかを確認する必要があります。存在しない場合は、新しい行を追加する必要があります。手順は次のとおりです。
- Artists の COUNT 集計を使用して、NameOfArtist に存在する行数を確認します。カウントを artist_count という変数に格納します。
- artist_count がゼロの場合、Artists に新しい行を挿入します。
-- Select the LAST_INSERT_ID() into a variable.
- artist_count が 1 の場合、ArtistID を検索して変数に格納します。
- Albums テーブルに新しい行を挿入します。
コード:
CREATE PROCEDURE AddAlbum(
NameOfArtist varchar(50),
AlbumName varchar(50)
);
BEGIN
DECLARE artist_count INT;
DECLARE artist_id INT;
SELECT COUNT(ArtistName) INTO artist_count FROM Artists
WHERE ArtistName = NameOfArtist;
IF artist_count = 0
THEN SELECT LAST_INSERT_ID(NameOfArtist) INTO artist_id
AND INSERT INTO Artists (ArtistName)
VALUES (NameOfArtist)
END IF;
IF artist_count = 1
THEN SELECT ArtistID INTO artist_id
FROM Artists
WHERE ArtistName = NameOfArtist
END IF;
INSERT INTO Albums (ArtistID, Title)
VALUES (artist_id, AlbumName);
END;
//
これは、私が現在取っているクラスのために、私が試みていることです。正直なところ、コードの書き方がよくわかりません。何をする必要があるかを正確に理解しています。何らかの理由で私の脳は、何らかの理由でコードを正しく記述する方法を処理していません。多くのエラーがあることは確かです。しばらく静かに取り組んできましたが、うまくいかないようです。私が取っているこのデータベース管理コースを再考しています。でも、あきらめるつもりはありません。これを手伝ってくれる人はいますか?