Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

コマンドラインからSQLに引数を渡す方法についてまとめています。

SQLに引数を渡すサンプルコード

引数渡しの方法は、DBMSごとにまったく異なっています。それぞれサンプルを交えて解説します。

MySQLで、コマンドラインからSQLに引数を渡すサンプルコード

MySQLのCLIコマンド、mysqlには変数を渡すためのオプションがありません。しかし、以下のように-eオプションで変数を設定するSQLをコマンドラインに含めることでシェルの変数を渡すことができます。

以下の例では、@aに20000,@bにKyoichiを代入して、ファイルtest.sqlの内容を実行しています。

$ mysql -u user1 -p -e "set @a=20000; set @b='Kyoichi'; source test.sql;"
Enter password: 
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  20988 | 1960-01-31 | Kyoichi    | Lamma     | M      | 1988-07-13 |
|  21560 | 1953-09-28 | Kyoichi    | Dechter   | M      | 1985-11-19 |
|  23879 | 1962-08-09 | Kyoichi    | Vesel     | M      | 1991-06-29 |
|  24635 | 1964-08-12 | Kyoichi    | Cochrane  | F      | 1994-03-19 |
|  24723 | 1960-11-04 | Kyoichi    | Penn      | M      | 1985-09-18 |
|  24803 | 1957-06-20 | Kyoichi    | Ranta     | M      | 1993-07-24 |
|  25114 | 1954-11-29 | Kyoichi    | Bednarek  | F      | 1991-12-20 |
|  26475 | 1961-03-22 | Kyoichi    | Bierbaum  | F      | 1990-03-01 |
|  28794 | 1954-05-20 | Kyoichi    | Peron     | M      | 1987-03-15 |
|  30043 | 1961-11-09 | Kyoichi    | Litvinov  | M      | 1989-01-24 |
+--------+------------+------------+-----------+--------+------------+

test.sqlの内容は以下の通りです。

$ cat test.sql
select * from employees.employees
where emp_no > @a
and first_name = @b
limit 10;

Oracleで、コマンドラインからSQLに引数を渡すサンプルコード

Oracleでは、&変数名という記述をすることで、引数を渡すことができます。SQL*Plusにて、以下のようにしてstats.sqlを作成します。

SELECT &GROUP_COL, MAX(&NUMBER_COL) MAXIMUM
FROM &TABLE
GROUP BY &GROUP_COL
.
SAVE STATS

@statsでファイルstats.sqlを実行すると&変数名の箇所で入力を求められます。

@stats

Enter value for group_col: JOB_ID
old   1: SELECT   &GROUP_COL,
new   1: SELECT   JOB_ID,
Enter value for number_col: SALARY
old   2:          MAX(&NUMBER_COL) MAXIMUM
new   2:          MAX(SALARY) MAXIMUM
Enter value for table: EMP_DETAILS_VIEW
old   3: FROM     &TABLE
new   3: FROM     EMP_DETAILS_VIEW
Enter value for group_col: JOB_ID
old   4: GROUP BY &GROUP_COL
new   4: GROUP BY JOB_ID

&変数の箇所に入力した値が代入され、SQLが実行されます。

JOB_ID        MAXIMUM
---------- ----------
AC_ACCOUNT       8300
AC_MGR          12000
AD_ASST          4400
AD_PRES         24000
AD_VP           17000
FI_ACCOUNT       9000
FI_MGR          12000
HR_REP           6500
IT_PROG          9000
MK_MAN          13000
MK_REP           6000

JOB_ID        MAXIMUM
---------- ----------
PR_REP          10000
PU_CLERK         3100
PU_MAN          11000
SA_MAN          14000
SA_REP          11500
SH_CLERK         4200
ST_CLERK         3600
ST_MAN           8200

19 rows selected.

参考)Oracle公式:SQL*Plusでのスクリプトの使用

なお、コマンドラインから引数を渡すには、以下のように実行することで、先頭から順に&変数に指定した引数が渡されます。

@stats JOB_ID SALARY EMP_DETAILS_VIEW JOB_ID

【関連記事】
SQL*Plusコマンド一覧と使い方まとめ 

postgreSQLで、コマンドラインからSQLに引数を渡すサンプルコード

postgreSQLでは、psqlコマンドに-vオプションで変数を設定すると、SQL内で「:変数名」の箇所に代入されます。以下は、DVDレンタルデータベースで、引数渡しでリリース年が2006年のものを抽出した例です。

$ psql -U postgres -d dvdrental -v var1=2006 < ./test.sql 
 film_id |       title       |                                                      description                                                      
---------+-------------------+-----------------------------------------------------------------------------------------------------------------------
     133 | Chamber Italian   | A Fateful Reflection of a Moose And a Husband who must Overcome a Monkey in Nigeria
     384 | Grosse Wonderful  | A Epic Drama of a Cat And a Explorer who must Redeem a Moose in Australia
       8 | Airport Pollock   | A Epic Tale of a Moose And a Girl who must Confront a Monkey in Ancient India
      98 | Bright Encounters | A Fateful Yarn of a Lumberjack And a Feminist who must Conquer a Student in A Jet Boat
       1 | Academy Dinosaur  | A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies
       2 | Ace Goldfinger    | A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China
       3 | Adaptation Holes  | A Astounding Reflection of a Lumberjack And a Car who must Sink a Lumberjack in A Baloon Factory
       4 | Affair Prejudice  | A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank
       5 | African Egg       | A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico
       6 | Agent Truman      | A Intrepid Panorama of a Robot And a Boy who must Escape a Sumo Wrestler in Ancient China
(10 rows)

SQLファイルtest.sqlの内容は以下のとおりです。

$ cat test.sql 
select film_id, title, description
from film 
where release_year=:var1
limit 10;

まとめ

ポテパンダの一言メモ
  • MySQLの引数渡しは、-eオプションでsetで変数設定する
  • Oracleの引数渡しは、@SQLファイル名に続けて引数を羅列する
  • postgreSQLの引数渡しは、-vオプションで変数を設定する

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。