我正在制作这个程序,它有一个菜单,可以获取用户的输入并根据他/她的选择执行特定的脚本。大致如下:
Please make a selection:
1: Do script a
2: Do script b
3: Do script c
我看了这个链接:如何制作 SQLPlus 或 PL/SQL 菜单 https://stackoverflow.com/questions/1850105/how-to-create-a-menu-in-sqlplus-or-pl-sql
我能够从中得到一些东西,但它的功能并不完整。因为有些台词我不明白。见下文。
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?
我可以让程序运行脚本,但其他的却不起作用。如果我选择一个超出该范围的数字,脚本将关闭,而不是重新加载自身。此外,当脚本运行时,它会自行关闭,而不是返回到主菜单。我知道我必须运行一个循环来解决这个问题,但我不知道如何用这种语言来实现它。
任何帮助表示赞赏。
谢谢!
Ans 1. Column script
是列中的select
查询定义为as script
, 意思是script
是列别名。
Ans 2. as script
指的是列别名select
stmt。此栏只有一栏select
陈述。例子SELECT column AS col1 FROM table;
。专栏NEW_VALUE http://www.adp-gmbh.ch/ora/sqlplus/new_value.html获取选定的值(该值由case
stmt,在本例中是脚本名称test1.sql
, test2.sql
, or FinalAssignment.sql
)并将其存储到v_script
.
Ans 3. dual
table 是一种特殊的单行表,默认情况下存在于所有 Oracle 数据库安装中。更多关于dual
here http://en.wikipedia.org/wiki/DUAL_table。你可以select
任何来自dual
, like select sysdate from dual;
or select 'ABCDEF' AS col1 from dual;
.
Ans 4. The v_script
列将包含根据您从以下选项中选择的脚本名称case
中的声明select
查询,即从菜单选择(如答案 2 中所述)。一旦选择,您可能想要运行该选定的脚本(不是吗?)。就是这样@&v_script
做。您可以使用以下命令在 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?
Caveats-
FinalAssignment.sql
应该是脚本本身的名称,即上述代码所在的脚本。
第 1,2 和 3 行是脚本的一部分。PROMPT http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12032.htm是一个有效的 SQL*Plus 命令,也是ACCEPT http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12005.htm.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)