1

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 が存在するかどうかを確認する必要があります。存在しない場合は、新しい行を追加する必要があります。手順は次のとおりです。

  1. Artists の COUNT 集計を使用して、NameOfArtist に存在する行数を確認します。カウントを artist_count という変数に格納します。
  2. artist_count がゼロの場合、Artists に新しい行を挿入します。

-- Select the LAST_INSERT_ID() into a variable.

  1. artist_count が 1 の場合、ArtistID を検索して変数に格納します。
  2. 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;
//

これは、私が現在取っているクラスのために、私が試みていることです。正直なところ、コードの書き方がよくわかりません。何をする必要があるかを正確に理解しています。何らかの理由で私の脳は、何らかの理由でコードを正しく記述する方法を処理していません。多くのエラーがあることは確かです。しばらく静かに取り組んできましたが、うまくいかないようです。私が取っているこのデータベース管理コースを再考しています。でも、あきらめるつもりはありません。これを手伝ってくれる人はいますか?

4

1 に答える 1

5

正確な手順に従う必要がある場合、これがコードになります。

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 
    INSERT INTO Artists (ArtistName) VALUES (NameOfArtist);
    SELECT LAST_INSERT_ID(NameOfArtist) INTO artist_id; 
  ELSE 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; //
于 2013-01-23T10:56:06.630 に答える