はじめに
Verticaで変数を使う方法について以下の記事でご紹介しました。vsqlで変数を使う方法
http://vertica-tech.ashisuto.co.jp/variable_on_vsql/
上記記事ではテーブル名に変数を指定する方法をご紹介しましたが、本記事ではWHERE句の条件値に変数を指定する方法をご紹介します。
手順解説にあたっての前提
変数を定義するには、以下2つの方法があります。 (1)データベースにログイン後に「\set」コマンドで定義する方法
(2)データベースにログイン前にvsqlの「-v」オプションで定義する方法
ここでは、以下のようなSQLを例に、WHERE句の条件値に変数をセットする方法をそれぞれご紹介します。
(2)データベースにログイン前にvsqlの「-v」オプションで定義する方法
1 2 3 4 5 |
dbadmin=> select count(*) from ssbm.lineorder where lo_shipmode = 'TRUCK'; count --------- 1714214 (1 row) |
使用例(1)データベースにログイン後に定義する方法
データベースにログイン後に定義するには、「\set」コマンドを利用します。
1 2 3 4 5 6 7 8 |
■vsqlでデータベースにログイン $ vsql -w Welcome to vsql, the Vertica Analytic Database interactive terminal. Type: \h or \? for help with vsql commands \g or terminate with semicolon to execute query \q to quit |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
■「\set」コマンドで初期変数を確認 dbadmin=> \set VERSION = 'vsql' AUTOCOMMIT = 'off' VERBOSITY = 'default' PROMPT1 = '%/%R%# ' PROMPT2 = '%/%R%# ' PROMPT3 = '>> ' ROWS_AT_A_TIME = '1000' DBNAME = 'dbadmin' USER = 'dbadmin' PORT = '5433' LOCALE = 'en_US@collation=binary' HISTSIZE = '500' |
1 2 3 4 5 |
■「\set」コマンドで条件値に変数をセット dbadmin=> \set key '''TRUCK''' dbadmin=> \echo :key 'TRUCK' |
<注意事項>
条件値に文字列をセットする場合、WHERE句内での「’」を認識させるために「”’」と連続で入力する点にご注意ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
■「\set」コマンドで変数の設定状況を確認 dbadmin-> \set VERSION = 'vsql' AUTOCOMMIT = 'off' VERBOSITY = 'default' PROMPT1 = '%/%R%# ' PROMPT2 = '%/%R%# ' PROMPT3 = '>> ' ROWS_AT_A_TIME = '1000' DBNAME = 'dbadmin' USER = 'dbadmin' PORT = '5433' LOCALE = 'en_US@collation=binary' HISTSIZE = '500' my_tab = 'lineorder' key = ''TRUCK'' ★セットされた変数 |
1 2 3 4 5 6 7 |
■変数をセットしてSQL文を実行 dbadmin=> select count(*) from ssbm.lineorder where lo_shipmode = :key; count --------- 1714214 (1 row) |
⇒平文でSQLを実行した時と同じ結果を抽出することができました。
使用例(2)データベースにログイン前に定義する方法
データベースにログイン前に定義するには、vsqlの「-v」オプションの「\set」コマンドを利用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
■「-v」オプションで変数を定義 $ vsql -v key="'TRUCK'" -w ■ログイン後に「\set」コマンドで変数の設定状況を確認 dbadmin=> \echo :key 'TRUCK' ■変数をセットしてSQL文を実行 dbadmin=> select count(*) from ssbm.lineorder where lo_shipmode = :key; count --------- 1714214 (1 row) |
⇒ログイン後に変数を個別に設定していた時と同様に
正しく結果を抽出することができました。
<注意事項>
ログイン前に変数を定義する場合に条件値に文字列を指定するには、WHERE句内での「’」を認識させるために「”」で囲む必要がある点にご注意ください。
参考情報
vsqlで変数を使う方法http://vertica-tech.ashisuto.co.jp/variable_on_vsql/
vsqlの主なコマンド
http://vertica-tech.ashisuto.co.jp/vsql_cmd/
マニュアル
https://my.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/ConnectingToVertica/vsql/Variables.htm
https://my.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/ConnectingToVertica/vsql/Meta-Commands/setNAMEVALUE.htm