月が次のようにピボットされたテーブルがあります。
product rev_jan unit_jan prod_jan rev_feb rev_march u...
今月のデータを取得する必要があります。
現在、バインド変数を使用しています。
select
rev_&1,
prod_&1,
unit_&1
from
table_name
この方法では、月に3回プロンプトを表示する必要があるため、より良い解決策はありますか。
月が次のようにピボットされたテーブルがあります。
product rev_jan unit_jan prod_jan rev_feb rev_march u...
今月のデータを取得する必要があります。
現在、バインド変数を使用しています。
select
rev_&1,
prod_&1,
unit_&1
from
table_name
この方法では、月に3回プロンプトを表示する必要があるため、より良い解決策はありますか。
OPが説明しているのは、sqlplusの「コマンドライン」でsqlplusスクリプトに引数を提供することです。ファイルに次の内容が含まれている場合:
select
rev_&1,
prod_&1,
unit_&1
from
table_name;
次に、sqlplus はプロンプトから最初の「コマンド ライン引数」を取得します。
SQL> @script.sql arg1
'&1' をリテラル値 arg1 に置き換えます。プロンプトは 3 回表示されません (または、部分文字列 '&1' がスクリプトに何回表示されても)。
「コマンド ライン」で引数を指定しない場合、sqlplus はスクリプトに表示されるたびに「&1」の値を求めるプロンプトを表示します (ここでは 3 回)。
「&」文字が sqlplus によって解釈されないようにするには、sqlplus の「set define off」を使用するか、文字列内で単一の「&」文字リテラルを連結します'AT' || '&' || 'T'
。
または、読みやすくするためにスクリプトにプロンプトを設定することもできます。
accept a_month prompt 'Please enter the desired month: '
select
rev_&a_month,
prod_&a_month,
unit_&a_month
from
table_name;
次に、次のように sqlplus プロンプトからスクリプトを呼び出します。
SQL> @script.sql
Please enter the desired month: jan
(スクリプトはここで実行されます。)
sqlplus のリファレンスについては、 Oracle のマニュアルを参照してください。