2

ユーザーの入力を取得し、ユーザーの選択に基づいて特定のスクリプトを実行するメニューを持つこのプログラムを作成しています。次のようなもの:

選択してください:
1: スクリプトを実行
2: スクリプト b を実行
3: スクリプト c を実行

私はこのリンクを見ました:SQLPlusまたはPL / SQLメニューの作成方法

そして、私はそれから何かを得ることができましたが、完全には機能していません. わからないセリフがあるから。下記参照。

プロンプト 1: 売上請求書を作成する
プロンプト 2: 売上請求書を問い合わせる

選択を受け入れる PROMPT "オプション 1-2 を入力してください: "
set term off
column script new_value v_script  -- What's column script?
select case '&selection.'
       when '1' then '@test.sql'
       when '2' then '@test.sql'
       else '@FinalAssignment.sql'
       end as script  -- What script is this referring to? 
from dual; -- Don't know this

set term on

@&v_script. -- What script is being ran here?

プログラムにスクリプトを実行させることはできますが、それ以外は実際には機能しません。その範囲外の数値を選択すると、スクリプト自体をリロードする代わりに、スクリプトが閉じます。また、スクリプトが実行されると、メイン メニューに戻る代わりにスクリプトが閉じます。この問題を解決するにはループを実行する必要があることはわかっていますが、この言語でそれを実装する方法がわかりません。

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

2

Ans 1. Column script is the column in the select query defined by as script, which means script is a column alias.

Ans 2. as script is referring to as a column alias of the select stmt. There is only one column in this select statement. Example SELECT column AS col1 FROM table;. The column NEW_VALUE gets the selected value (which is driven from the case stmt, which in this case is the script name test1.sql, test2.sql, or FinalAssignment.sql) and stores it into v_script.

Ans 3. dual table is a special one-row table present by default in all Oracle database installations. More on dual here. You can select anything from dual, like select sysdate from dual; or select 'ABCDEF' AS col1 from dual;.

Ans 4. The v_script column will contain the script name as per your selection from the case statement in the select query, i.e. from the menu selection (as discussed in Ans 2.). Once that is selected, you may want to run that selected script (Wouldn't you?). Thats what @&v_script does. You run a script in SQLPlus using @script_name

PROMPT  1: Make a sales invoice 
PROMPT  2: Inquire a sales invoice    
accept selection PROMPT "Enter option 1-2: "

set term off
column script new_value v_script  --Q1. What's column script?
select case '&selection.'          --from accept above
       when '1' then '@test1.sql'  --script to run when chosen option 1.
       when '2' then '@test2.sql'  --script to run when chosen option 2.
       else '@FinalAssignment.sql' --this script
       end as script  --Q2. What script is this referring to? 
from dual; --Q3. Don't know this

set term on

@&v_script. --Q4. What script is being ran here?

Caveats-

  1. FinalAssignment.sql should be the name of the script itself i.e. the script where the above code is.

  2. Line 1,2, and 3 are part of the script. PROMPT is a valid SQL*Plus command and so is ACCEPT.

于 2012-08-09T05:53:05.080 に答える