如何在 SQLPlus 或 PL/SQL 中制作菜单?
Posted
技术标签:
【中文标题】如何在 SQLPlus 或 PL/SQL 中制作菜单?【英文标题】:How to make a menu in SQLPlus or PL/SQL? 【发布时间】:2012-08-08 17:02:57 【问题描述】:我正在制作这个程序,它有一个菜单,可以获取用户的输入并根据他/她的选择执行特定的脚本。大致如下:
请做出选择: 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 并没有真正起作用。如果我选择该范围之外的数字,脚本将关闭,而不是重新加载自身。此外,当脚本运行时,它会自行关闭,而不是返回主菜单。我知道我必须运行一个循环来解决这个问题,但我不知道如何用这种语言实现它。
任何帮助表示赞赏。 谢谢!
【问题讨论】:
docs.oracle.com/cd/B10501_01/server.920/a90842/ch13.htm#1007781 用于“列”的东西。这应该可以解决所有问题。 @miguel 我们当然应该就此向 sasipriya 提问:P 【参考方案1】:Ans 1.列script
是as script
定义的select
查询中的列,也就是说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;
。
Ans 4. v_script
列将包含您从 select
查询中的 case
语句中选择的脚本名称,即来自菜单选择(如 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?
注意事项-
FinalAssignment.sql
应该是脚本本身的名称,即上面代码所在的脚本。
第 1,2 和 3 行是脚本的一部分。 PROMPT
是有效的 SQL*Plus 命令,ACCEPT
也是如此。
【讨论】:
以上是关于如何在 SQLPlus 或 PL/SQL 中制作菜单?的主要内容,如果未能解决你的问题,请参考以下文章
在PL/SQL/sqlplus客户端 中如何让程序暂停几秒钟
在 linux 中使用 sqlplus 部署 pl sql .sql 脚本
ORACLE 在 SQLPLUS 与 PL/SQL 中显示乱码的问题
oracle数据库中有数据,通过pl/sql查询不到,用sqlplus能查到,PL/SQL developer会对数据进行本地缓存