3

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.

4

6 に答える 6

18

これを行うための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部分の「メニュー」はこのスクリプトの名前であるため、ユーザーが無効なオプションを入力すると、このスクリプトは再び実行されます。

于 2009-12-05T10:53:35.383 に答える
2

マスタースクリプトからスクリプトを実行できます。

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

&variablenameSQLPlusで変数を参照するために使用されます。これは、シェルスクリプトで使用されるvariablenameのとほぼ同じ方法です。$variablenameが未定義の場合variablename、SQLPlusはユーザーに値の入力を求めます。

マスタースクリプトに相対的なパスを指定できます。この例では、サポートするスクリプトが同じディレクトリにあることに依存しています。

于 2009-12-05T02:44:11.963 に答える
2

SQLPlus や PL/SQL でやろうとしていることを達成するのは困難です。

SQLPlus は Oracle データベースのフロントエンドです。その主な目的は、Oracle RDBMS に対してクエリを実行することです。

PL/SQL は、Oracle でデータを操作するための言語です。

代わりに、ユーザー インタラクションが必要な場合は、SQL クエリまたは PL を実行するための Oracle 接続を使用して、ここにお気に入りの言語(Python、C/C++、C#、Java など) を挿入する小さなスクリプト/プログラムを作成することをお勧めします。 /必要な SQL プログラム。

于 2009-12-04T22:39:20.850 に答える
0

私はこれのために実際の言語を手に入れました(パブロのコメントによると)。

接続時にリストの提案を表示する login.sql にいくつかのものを含めることができます (PRINT または PROMPT SQL*Plus ステートメント)。

また、ユーザーが @1、@2 などを入力した場合に実行される 1.sql、2.sql などと呼ばれる一連のスクリプトを作成できます (それらが正しいディレクトリにある場合)。

しかし実際には、SQL*Plus はこれには適していません。

于 2009-12-05T00:38:46.350 に答える
0

DBMS_OUTPUTを使用して、行を画面に出力できます。GET_LINE を実行する関数もあるようですが、使用したことがなく、どのように機能するかわかりません。

SQLPlus の設定に注意する必要があります。適切に設定しないと、行が切り捨てられる可能性があります。

于 2009-12-04T22:39:22.877 に答える
0

スクリプトがまったく関係ない場合は、単純なバッチ ファイルまたはシェル スクリプトを使用します。

于 2009-12-05T14:42:16.570 に答える