2012-08-08 55 views
2

我正在製作這個程序,該程序將有一個菜單來獲取用戶的輸入,並根據他/她的選擇執行特定的腳本。沿着線的東西:如何在SQLPlus或PL/SQL中創建菜單?

 
Please make a selection: 
1: Do script a 
2: Do script b 
3: Do script c 

我看了看這個鏈接:How to make SQLPlus or PL/SQL Menu

,我能得到的東西出來,但它沒有充分發揮作用。因爲有些行我不明白。見下文。

 
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 -- 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? 

我可以讓程序運行的腳本,但其他人並沒有真正發揮作用。如果我在該範圍之外選擇一個數字,腳本將關閉,而不是重新加載。另外,當腳本運行時,它會自行關閉,而不是返回到主菜單。我知道我必須運行一個循環來解決這個問題,但我不知道如何用這種語言來實現它。

任何幫助表示讚賞它。 謝謝!

+0

http:// docs。oracle.com/cd/B10501_01/server.920/a90842/ch13.htm#1007781「列」的東西。這應該清除一切。 – Mat 2012-08-08 17:11:04

+0

@miguel我們當然應該問這個sasipriya:P – unknownsatan 2012-08-12 21:19:48

回答

2

答1.script是在由as script定義的select查詢,這意味着script是列別名的列。

Ans 2.as script指的是select stmt的列別名。此select語句中只有一列。示例SELECT column AS col1 FROM table;。列NEW_VALUE獲得選擇的值(其從case stmt驅動,在這種情況下是腳本名稱test1.sql,test2.sqlFinalAssignment.sql),並將其存儲到v_script中。

答案3.dual表是默認情況下在所有Oracle數據庫安裝中呈現的特殊的單行表。更多關於dualhere。你可以select任何東西從dual,像select sysdate from dual;select 'ABCDEF' AS col1 from dual;

答4.v_script列將在select查詢,即從菜單中選擇包含腳本的名稱,按您選擇從case語句(如答案2.討論)。一旦選擇了,你可能想要運行該選定的腳本(不是嗎?)。那就是@&v_script

  1. FinalAssignment.sql應該是劇本本身即腳本,上面的代碼的名稱 - 你在sqlplus使用@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? 
    

    注意事項運行的腳本。

  2. 1,2和3行是腳本的一部分。 PROMPT是有效的SQL * Plus命令,因此是ACCEPT