如何在SQLPlus或PL / SQL中创建菜单?

时间:2012-08-08 17:02:57

标签: sql plsql sqlplus

我正在制作这个程序,它有一个菜单可以获取用户的输入并根据他/她的选择执行某个脚本。有点像:

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?

我可以让程序运行脚本,但是其他方法并没有真正起作用。如果我选择该范围之外的数字,脚本将关闭,而不是重新加载。此外,当脚本运行时,它会自行关闭,而不是返回主菜单。我知道我必须运行一个循环来解决这个问题,但我不知道如何用这种语言来实现它。

任何帮助都表示赞赏。 谢谢!

1 个答案:

答案 0 :(得分:2)

答案1。script是由select定义的as script查询中的列,表示script是列别名。

Ans 2。 as script指的是select stmt的列别名。此select语句中只有一列。示例SELECT column AS col1 FROM table;。列NEW_VALUE获取所选值(由case stmt驱动,在这种情况下,脚本名称为test1.sqltest2.sqlFinalAssignment.sql并将其存储到v_script

Ans 3。 dual表是所有Oracle数据库安装中默认存在的特殊单行表。有关dual here的更多信息。您可select来自dual的任何内容,例如select sysdate from dual;select 'ABCDEF' AS col1 from dual;

答案4。 v_script列将根据您在case查询中的select语句中的选择包含脚本名称,即从菜单中选择(如Ans 2中所述)。选择后,您可能想要运行所选脚本(不是吗?)。这是@&v_script的作用。您使用@script_name

在SQLPlus中运行脚本
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?

警告 -

  1. FinalAssignment.sql应该是脚本本身的名称,即上述代码所在的脚本。

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

相关问题