DB

各DB上でストアドプログラムを試してみた

今回は、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の場合の実行結果
id_valテーブル

やってみたこと

  1. Oracleの場合の実行結果
  2. MySQLの場合の実行結果
  3. PostgreSQLの場合の実行結果
  4. SQL Serverの場合の実行結果

Oracleの場合の実行結果

1) ストアドプログラム(PL/SQL)の実行結果は以下の通り

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; 
/
Oracle_PLSQL実行

2) ストアドプログラム(PL/SQL)の実行後の結果は以下の通り

select * from id_val
Oracle_PLSQL実行後データ



MySQLの場合の実行結果

1) ストアドプログラム(ストアドルーチン)の実行結果は以下の通り

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_ストアド実行

MySQLの場合は、上記のように、一旦ストアドプロシージャを作成してから実行する必要がある。

2) ストアドプログラム(ストアドルーチン)の実行後の結果は以下の通り

select * from world.id_val;
MySQL_ストアド実行後データ



PostgreSQLの場合の実行結果

1) ストアドプログラム(PL/pgSQL)の実行結果は以下の通り

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$$;
PostgreSQL_plpgsql実行

2) ストアドプログラム(PL/pgSQL)の実行後の結果は以下の通り

select * from public.id_val;
PostgreSQL_plpgsql実行後データ



SQL Serverの場合の実行結果

1) ストアドプログラム(Transact-SQL)の実行結果は以下の通り

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
SQLServer_tsql実行

2) ストアドプログラム(Transact-SQL)の実行後の結果は以下の通り

select * from dbo.id_val;
SQLServer_tsql実行後データ