IT Soldier Sakuri !!

Oracle使い。いつのまにかIT戦士になってしまったさくりの可哀想な奮闘記。

Oracle活用 SQL実行時に引数を渡す

おうちのマンションの目の前で花火が上がったよー!!!
めっちゃ綺麗!!
f:id:itsoldiersakuri:20150805212618j:plain


SQLに引数を渡して実行したい!
意外とみんなやらないんだよね、なんでだろう。

引数の必要なSQLファイルを作成。
引数のところは&1、&2…とする。

test_Argument.sql

select to_date('&1','yyyymmdd') from dual;
select to_number('&2') + to_number('&3') from dual;
select * from departments
where departmenr_id = '&4';


実行するよー!
引数は実行するSQLファイルの後ろに半角スペースで区切って渡すのよ!

21:31:44 SQL> conn hr/hr@xe
接続されました。
21:31:47 SQL> @C:\Users\SAKURI\sql\test_Argument.sql 20150805 10 50 1501: select to_date('&1','yyyymmdd') from dual
新   1: select to_date('20150805','yyyymmdd') from dual

TO_DATE(
--------
15-08-051: select to_number('&2') + to_number('&3') from dual
新   1: select to_number('10') + to_number('50') from dual

TO_NUMBER('10')+TO_NUMBER('50')
-------------------------------
                             602: where department_id = '&4'2: where department_id = '150'

DEPARTMENT_ID DEPARTMENT_NAME                                              MANAGER_ID LOCATION_ID
------------- ------------------------------------------------------------ ---------- -----------
          150 Shareholder Services                                         @                 1700

21:31:50 SQL>

ちゃんと引数渡す前と、受け取った後が[旧][新]で表示されるのでわかりやすい!


引数が足りないと、対話式になるので注意!

21:34:34 SQL> @C:\Users\SAKURI\sql\test_Argument.sql 20150805 101: select to_date('&1','yyyymmdd') from dual
新   1: select to_date('20150805','yyyymmdd') from dual

TO_DATE(
--------
15-08-05

3に値を入力してください: 301: select to_number('&2') + to_number('&3') from dual
新   1: select to_number('10') + to_number('30') from dual

TO_NUMBER('10')+TO_NUMBER('30')
-------------------------------
                             40

4に値を入力してください: 2002: where department_id = '&4'2: where department_id = '200'

DEPARTMENT_ID DEPARTMENT_NAME                                              MANAGER_ID LOCATION_ID
------------- ------------------------------------------------------------ ---------- -----------
          200 Operations                                                   @                 1700

21:35:03 SQL>

これを使った応用を…
ま、まぁそのうちに……。