目次
はじめに
Verticaでは、vsqlユーティリティを使ってデータベースに接続しますが、このvsqlユーティリティではSQLを実行する際に変数を使う事で動的なSQLを実行する事ができます。この記事ではvsqlで変数を使う方法をご紹介します。
変数の定義方法
変数を定義する方法は2通りあります。1. vsqlを実行する時の引数で定義
2. vsqlプロンプトの中で定義
これらについて、順番に記載します。2. vsqlプロンプトの中で定義
1. vsqlを実行する時の引数で定義
vsqlを実行する時のコマンドの引数で変数を定義するには、-vオプションを使います。引数には、「変数名=値」を与えます。
使用例
$ vsql -v my_table=lineorder
この例では、「my_table」という変数に「lineorder」という文字を代入しています。$ vsql -v my_table=lineorder
2. vsqlプロンプトの中で定義
vsqlプロンプトの中で変数を定義するには、\setを使います。構文は、「\set 変数名 値」です。
使用例
dbadmin=> \set my_table lineorder;
dbadmin=> \set my_table lineorder;
注意点
変数名には、文字と数字と_(アンダースコア)を使う事ができます。
いくつかの変数はvsqlにとって特別な意味を持っており、それらは大文字で定義されています。
これらの大文字で定義された変数は使わないようにしてください。
変数名には、文字と数字と_(アンダースコア)を使う事ができます。
いくつかの変数はvsqlにとって特別な意味を持っており、それらは大文字で定義されています。
これらの大文字で定義された変数は使わないようにしてください。
変数の確認方法
設定した定義の一覧を確認するには、\setを使います。この方法だと、自身が設定した変数の他にVerticaがデフォルトで設定している変数も一緒に出力されます。
使用例
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_table = ‘lineorder’
特定の変数をピンポイントで確認するには、\echoを使います。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_table = ‘lineorder’
構文は、「\echo :変数名」です。
使用例
dbadmin=> \echo :my_table
lineorder
dbadmin=> \echo :my_table
lineorder
変数の解除方法
設定した定義を解除するには、\unsetを使います。構文は、「\unset 変数名」です。
使用例
dbadmin=> \unset my_table
dbadmin=> \unset my_table
変数の使い方
定義した変数をSQLの中で使うには、変数名の前に:(コロン)を付けます。使用例
dbadmin=> select * from :my_table ;
dbadmin=> select * from :my_table ;
使用例
SQLの中で指定するテーブル名を変数化する例を記載します。例えば、頻繁に使う長い名前のテーブルがあるとして、そのテーブル名を変数化する例を紹介します。
変数化するテーブル名:jugemu_jugemu
変数名:my_table
変数を定義します。
変数名:my_table
1 |
dbadmin=> \set my_table jugemu_jugemu; |
定義した変数を確認します。
1 2 |
dbadmin=> \echo :my_table jugemu_jugemu |
動作確認をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
dbadmin=> insert into jugemu_jugemu values(1,'paipopai'); dbadmin=> select * from jugemu_jugemu; col1 | col2 ------+---------- 1 | paipopai (1 row) dbadmin=> select * from :my_table; col1 | col2 ------+---------- 1 | paipopai (1 row) |
このようにvsqlでは変数を使う事ができます。
これをシェルスクリプトなどと組み合わせて応用する事で、様々な場面で活用できると思います。