今回は、Oracle・MySQL・PostgreSQL・SQL Serverの各DB上でストアドプログラムを試してみたので、共有する。ストアドプログラムを利用すると、DB上のテーブルへのデータ一括追加を素早く行うことができる。
前提条件
Windows端末上に、Oracle・MySQL・PostgreSQL・SQL Serverをそれぞれインストール済であること。
Oracle・MySQL・PostgreSQLのインストール手順は下記記事を参照のこと。
Windows端末にMySQL、PostgreSQL、Oracleをインストールしてみた今回はいろいろな種類のデータベースを使ってみたかったので、Windows端末に、MySQL、PostgreSQL、Oracleそれぞれの...
また、SQL Serverのインストール手順は下記記事を参照のこと。
SQL Serverのデータ分析を行う環境構築を行った(1)今回は、SQL Serverのデータ分析を行う環境構築として、SQL Server・SQL Server Management Stud...
さらに、各DB上に、以下の構成をもつid_valテーブルを作成済であること。
※写真はMySQLの場合の実行結果
やってみたこと
Oracleの場合の実行結果
1) ストアドプログラム(PL/SQL)の実行結果は以下の通り
1 2 3 4 5 6 7 8 9 10 11 | begin for i in 1..10 loop if (i mod 2 = 0) then insert into id_val values (i, 'even'); else insert into id_val values (i, 'odd'); end if; end loop; commit; end; / |
2) ストアドプログラム(PL/SQL)の実行後の結果は以下の通り
1 | select * from id_val |
MySQLの場合の実行結果
1) ストアドプログラム(ストアドルーチン)の実行結果は以下の通り
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | use world; DELIMITER $$ drop procedure if exists testproc$$ create procedure testproc() begin DECLARE i INT; set i = 1; while i <= 10 do if i mod 2 = 0 then insert into id_val values(i, 'even'); else insert into id_val values(i, 'odd'); end if; set i = i + 1; end while; commit; end$$ DELIMITER ; call testproc(); |
MySQLの場合は、上記のように、一旦ストアドプロシージャを作成してから実行する必要がある。
2) ストアドプログラム(ストアドルーチン)の実行後の結果は以下の通り
1 | select * from world.id_val; |
PostgreSQLの場合の実行結果
1) ストアドプログラム(PL/pgSQL)の実行結果は以下の通り
1 2 3 4 5 6 7 8 9 10 | do $$ begin for i in 1..10 loop if i % 2 = 0 then insert into public.id_val values (i, 'even'); else insert into public.id_val values (i, 'odd'); end if; end loop; end$$; |
2) ストアドプログラム(PL/pgSQL)の実行後の結果は以下の通り
1 | select * from public.id_val; |
SQL Serverの場合の実行結果
1) ストアドプログラム(Transact-SQL)の実行結果は以下の通り
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | declare @i int; declare @val nvarchar(20); declare @ins_sql varchar(256); begin set @i = 1; while @i <= 10 begin if @i % 2 = 0 set @val = 'even'; else set @val = 'odd'; set @ins_sql = 'insert into dbo.id_val values (' + STR(@i) + ', ' + '''' + @val + ''');'; execute(@ins_sql); set @i = @i + 1; end end |
2) ストアドプログラム(Transact-SQL)の実行後の結果は以下の通り
1 | select * from dbo.id_val; |