I have several scripts that I would like to start from a menu presented to the SQLPlus user. Something like:
Please make a selection:
1: Do script a
2: Do script b
3: Do script c
I just need a point in the right direction, not a quick answer.
これを行うためのSQLPlusスクリプトは次のとおりです。
prompt Please make a selection:
prompt 1: Do script a
prompt 2: Do script b
prompt 3: Do script c
accept selection prompt "Enter option 1-3: "
set term off
column script new_value v_script
select case '&selection.'
when '1' then 'script_a'
when '2' then 'script_b'
when '3' then 'script_c'
else 'menu'
end as script
from dual;
set term on
@&v_script.
注意:case式のELSE部分の「メニュー」はこのスクリプトの名前であるため、ユーザーが無効なオプションを入力すると、このスクリプトは再び実行されます。
マスタースクリプトからスクリプトを実行できます。
CASE LOWER(&v_script_selection)
WHEN 'a' THEN
@script_a.sql
WHEN 'b' THEN
@script_b.sql
WHEN 'c' THEN
@script_c.sql
ELSE
DBMS_OUTPUT('No such option available')
END
&variablename
SQLPlusで変数を参照するために使用されます。これは、シェルスクリプトで使用されるvariablename
のとほぼ同じ方法です。$variablename
が未定義の場合variablename
、SQLPlusはユーザーに値の入力を求めます。
マスタースクリプトに相対的なパスを指定できます。この例では、サポートするスクリプトが同じディレクトリにあることに依存しています。
SQLPlus や PL/SQL でやろうとしていることを達成するのは困難です。
SQLPlus は Oracle データベースのフロントエンドです。その主な目的は、Oracle RDBMS に対してクエリを実行することです。
PL/SQL は、Oracle でデータを操作するための言語です。
代わりに、ユーザー インタラクションが必要な場合は、SQL クエリまたは PL を実行するための Oracle 接続を使用して、ここにお気に入りの言語(Python、C/C++、C#、Java など) を挿入する小さなスクリプト/プログラムを作成することをお勧めします。 /必要な SQL プログラム。
私はこれのために実際の言語を手に入れました(パブロのコメントによると)。
接続時にリストの提案を表示する login.sql にいくつかのものを含めることができます (PRINT または PROMPT SQL*Plus ステートメント)。
また、ユーザーが @1、@2 などを入力した場合に実行される 1.sql、2.sql などと呼ばれる一連のスクリプトを作成できます (それらが正しいディレクトリにある場合)。
しかし実際には、SQL*Plus はこれには適していません。
DBMS_OUTPUTを使用して、行を画面に出力できます。GET_LINE を実行する関数もあるようですが、使用したことがなく、どのように機能するかわかりません。
SQLPlus の設定に注意する必要があります。適切に設定しないと、行が切り捨てられる可能性があります。
スクリプトがまったく関係ない場合は、単純なバッチ ファイルまたはシェル スクリプトを使用します。