我正在制作这个程序,它有一个菜单可以获取用户的输入并根据他/她的选择执行某个脚本。有点像:
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 :(得分: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.sql
,test2.sql
或FinalAssignment.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
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?
警告 -