我正在制作这个程序,它有一个菜单,可以获取用户的输入并根据他/她的选择执行特定的脚本。大致如下:
Please make a selection: 1: Do script a 2: Do script b 3: Do script c
I looked at this link : How to make SQLPlus or PL/SQL Menu
And I was able to get something out of it, BUT it's not fully functional. Because there are certain lines I don't understand. See below.
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. 栏 script
是 select
中的列由 as script
定义的查询,这意味着 script
是列别名。
答案2。 as script
指的是 select
的列别名stmt。此select
中只有一栏陈述。示例SELECT column AS col1 FROM table;
。专栏 NEW_VALUE
获取选定的值(从 case
stmt 驱动,在本例中是脚本名称 test1.sql
、 test2.sql
或 FinalAssignment.sql
)并将其存储到 v_script
中.
答案 3。 dual
table 是一种特殊的单行表,默认存在于所有 Oracle 数据库安装中。更多关于dual
here 。您可以select
任何来自 dual
的内容,例如select sysdate from dual;
或select 'ABCDEF' AS col1 from dual;
.
Ans 4. v_script
列将包含您从case
中选择的脚本名称。 select
中的声明查询,即从菜单选择(如答案 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?
注意事项-
关于sql - 如何在 SQLPlus 或 PL/SQL 中制作菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11869559/