前提・実現したいこと
同じ図書があるかどうかを点検した後、挿入するプロシージャを作ってみましょう。(下のように)
CREATE TABLEセットは下記の通りです。
DROP DATABASE IF EXISTS madang; DROP USER IF EXISTS madang@localhost; create user madang@localhost identified WITH mysql_native_password by 'madang'; create database madang; grant all privileges on madang.* to madang@localhost with grant option; commit; USE madang; CREATE TABLE Book ( bookid INTEGER PRIMARY KEY, bookname VARCHAR(40), publisher VARCHAR(40), price INTEGER ); CREATE TABLE Customer ( custid INTEGER PRIMARY KEY, name VARCHAR(40), address VARCHAR(50), phone VARCHAR(20) ); CREATE TABLE Orders ( orderid INTEGER PRIMARY KEY, custid INTEGER , bookid INTEGER , saleprice INTEGER , orderdate DATE, FOREIGN KEY (custid) REFERENCES Customer(custid), FOREIGN KEY (bookid) REFERENCES Book(bookid) ); INSERT INTO Book VALUES(1, 'サッカーの歴史', 'グッドスポーツ', 7000); INSERT INTO Book VALUES(2, 'サッカーを知っている女の子', '木の数', 13000); INSERT INTO Book VALUES(3, 'サッカーの理解', '大韓メディア', 22000); INSERT INTO Book VALUES(4, 'ゴルフバイブル', '大韓メディア', 35000); INSERT INTO Book VALUES(5, 'フィギュア教本', 'グッドスポーツ', 8000); INSERT INTO Book VALUES(6, '重量挙げ段階別技術', 'グッドスポーツ', 6000); INSERT INTO Book VALUES(7, '野球の思い出', '理想のメディア', 20000); INSERT INTO Book VALUES(8, '野球をお願い', '理想のメディア', 13000); INSERT INTO Book VALUES(9, 'オリンピックの話', '三省堂', 7500); INSERT INTO Book VALUES(10, 'Olympic Champions', 'Pearson', 13000); INSERT INTO Customer VALUES (1, 'パク·チソン', 'イギリスのマンチェスター', '000-5000-0001'); INSERT INTO Customer VALUES (2, 'キム·ヨナ', '大韓民国 ソウル', '000-6000-0001'); INSERT INTO Customer VALUES (3, 'チャン·ミラン', '大韓民国 江原道', '000-7000-0001'); INSERT INTO Customer VALUES (4, 'チュ·シンス', '米国のクリーブランド', '000-8000-0001'); INSERT INTO Customer VALUES (5, 'パク·セリ', '大韓民国の大田', NULL); INSERT INTO Orders VALUES (1, 1, 1, 6000, STR_TO_DATE('2014-07-01','%Y-%m-%d')); INSERT INTO Orders VALUES (2, 1, 3, 21000, STR_TO_DATE('2014-07-03','%Y-%m-%d')); INSERT INTO Orders VALUES (3, 2, 5, 8000, STR_TO_DATE('2014-07-03','%Y-%m-%d')); INSERT INTO Orders VALUES (4, 3, 6, 6000, STR_TO_DATE('2014-07-04','%Y-%m-%d')); INSERT INTO Orders VALUES (5, 4, 7, 20000, STR_TO_DATE('2014-07-05','%Y-%m-%d')); INSERT INTO Orders VALUES (6, 1, 2, 12000, STR_TO_DATE('2014-07-07','%Y-%m-%d')); INSERT INTO Orders VALUES (7, 4, 8, 13000, STR_TO_DATE( '2014-07-07','%Y-%m-%d')); INSERT INTO Orders VALUES (8, 3, 10, 12000, STR_TO_DATE('2014-07-08','%Y-%m-%d')); INSERT INTO Orders VALUES (9, 2, 10, 7000, STR_TO_DATE('2014-07-09','%Y-%m-%d')); INSERT INTO Orders VALUES (10, 3, 8, 13000, STR_TO_DATE('2014-07-10','%Y-%m-%d')); CREATE TABLE Imported_Book ( bookid INTEGER, bookname VARCHAR(40), publisher VARCHAR(40), price INTEGER ); INSERT INTO Imported_Book VALUES(21, 'Zen Golf', 'Pearson', 12000); INSERT INTO Imported_Book VALUES(22, 'Soccer Skills', 'Human Kinetics', 15000); commit;
該当のソースコード
delimiter // create procedure BookInsertOrUpdate( myBookID integer, myBookName varchar(40), myPublisher varchar(40), myPrice int) begin declare mycount integer; select count(*) into mycount from book where bookname like myBookName; if mycount!=0 then set SQL_SAFE_UPDATES=0; update book set price=myprice where bookname like mybookName; else insert into book(bookid,bookname,publisher,price) VALUES(myBookID,myBookName,myPublisher,myPrice); end if; END; // delimter ; CALL BookInsertOrUpdate(15, 'スポーツの楽しみ', '庭の科学書', 25000); select * from book; call BookInsertOrUpdate(15,'スポーツの楽しみ','第一書籍',18000); select * from book; 図書の平均価格を返却するプロシージャです。 delimiter // create procedure AveragePrice ( out AverageVal integer) Begin select avg(price) into AverageVal from book where price is not null; end; // call AveragePrice (@myValue); select @myValue;
補足情報(FW/ツールのバージョンなど)
この該当プロシージャに本の名前が同じであれば、本の価格だけでなく、出版社も入力データに変更したいと思います。
上に書いたのは先ず本の名前が同じ場合、本の価格だけを入力価格で表すプロシージャを作ってみました。
回答2件
あなたの回答
tips
プレビュー