2

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

请做出选择:
1:做脚本
2:做脚本b
3:做脚本c

我查看了这个链接:How to make SQLPlus or PL/SQL Menu

我能够从中得到一些东西,但它并没有完全发挥作用。因为有些台词我听不懂。见下文。

提示 1:制作销售发票
提示 2:查询销售发票

接受选择 PROMPT "输入选项 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?

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

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

4

1 回答 1

2

Ans 1. Columnscriptselect查询中定义的列as script,即script是列别名。

Ans 2. as script指的是selectstmt 的列别名。select此语句中只有一列。例子SELECT column AS col1 FROM table;。该列NEW_VALUE获取选定的值(由casestmt 驱动,在本例中为脚本名称test1.sqltest2.sqlFinalAssignment.sql)并将其存储到v_script.

Ans 3. dual table 是一个特殊的单行表,默认情况下出现在所有 Oracle 数据库安装中。更多关于dual 这里。你可以select从任何东西dual,喜欢select sysdate from dual;select 'ABCDEF' AS col1 from dual;

Ans 4.v_script列将包含根据您从查询case语句中选择的脚本名称select,即来自菜单选择(如 Ans 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?

注意事项-

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

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

于 2012-08-09T05:53:05.080 回答