如何在 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.scriptas script定义的select查询中的列,也就是说script是列别名。

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

Ans 3. dual 表是一个特殊的单行表,默认情况下出现在所有 Oracle 数据库安装中。更多关于dualhere。你可以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 中制作菜单?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQLPlus 中运行 PL/SQL 代码?

在PL/SQL/sqlplus客户端 中如何让程序暂停几秒钟

在 linux 中使用 sqlplus 部署 pl sql .sql 脚本

ORACLE 在 SQLPLUS 与 PL/SQL 中显示乱码的问题

oracle数据库中有数据,通过pl/sql查询不到,用sqlplus能查到,PL/SQL developer会对数据进行本地缓存

如何在 sqlplus 中调试 Oracle 动态 sql?