1

月が次のようにピボットされたテーブルがあります。

product rev_jan unit_jan prod_jan rev_feb  rev_march u...

今月のデータを取得する必要があります。

現在、バインド変数を使用しています。

select 
rev_&1,
prod_&1,
unit_&1
from 
table_name

この方法では、月に3回プロンプトを表示する必要があるため、より良い解決策はありますか。

4

1 に答える 1

2

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 のマニュアルを参照してください。

于 2013-01-28T19:20:14.857 に答える