sql - 如何在 SQLPlus 或 PL/SQL 中制作菜单?

标签 sql plsql sqlplus

我正在制作这个程序,它有一个菜单,可以获取用户的输入并根据他/她的选择执行特定的脚本。大致如下:

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.scriptselect 中的列由 as script 定义的查询,这意味着 script是列别名。

答案2。 as script指的是 select 的列别名stmt。此select中只有一栏陈述。示例SELECT column AS col1 FROM table; 。专栏 NEW_VALUE 获取选定的值(从 case stmt 驱动,在本例中是脚本名称 test1.sqltest2.sqlFinalAssignment.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?

注意事项-

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

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

关于sql - 如何在 SQLPlus 或 PL/SQL 中制作菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11869559/

相关文章:

Oracle STANDARD_HASH 在 PLSQL 中不可用?

plsql - 运行 PL/SQL 程序时如何禁用输出中的旧值和新值选项

oracle11g - 在插入之前触发删除记录

sql - 是否可以将选择字段分配给 PostgreSQL 中的变量?

sql - 创建基于云的 SQL 数据库的最简单/最便宜的方法是什么?

sql - 在针对 Oracle 编写良好的 SQL 时,您会给您的开发人员什么简单的指导方针?

oracle - plsql存储过程采用参数给出错误

oracle - 如何覆盖Oracle DB中的> 2499字符错误?

mysql - 循环引用的 SQL 代码

MySQL:将不同的值连接为单个值