3

我有几个脚本,我想从呈现给 SQLPlus 用户的菜单开始。类似于:

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

我只需要一个正确的方向,而不是一个快速的答案。

4

6 回答 6

18

这是一个用于执行此操作的 SQL Plus 脚本:

prompt Please make a selection:
prompt 1: Do script a
prompt 2: Do script b
prompt 3: Do script c

accept selection prompt "Enter option 1-3: "

set term off

column script new_value v_script

select case '&selection.'
       when '1' then 'script_a'
       when '2' then 'script_b'
       when '3' then 'script_c'
       else 'menu'
       end as script
from dual;

set term on

@&v_script.

注意 case 表达式的 ELSE 部分中的“菜单”是此脚本的名称,因此当用户输入无效选项时它会再次运行。

于 2009-12-05T10:53:35.383 回答
2

您可以从主脚本执行脚本:

CASE LOWER(&v_script_selection)
  WHEN 'a' THEN
    @script_a.sql
  WHEN 'b' THEN
    @script_b.sql
  WHEN 'c' THEN
    @script_c.sql
  ELSE
    DBMS_OUTPUT('No such option available')
END

&variablename用于在 SQLPlus 中引用变量,与在 shell 脚本中使用的variablename方式非常相似。$variablename如果variablename未定义,则 SQLPlus 会提示用户输入值。

您可以提供相对于主脚本的路径 - 该示例依赖于支持脚本位于同一目录中。

于 2009-12-05T02:44:11.963 回答
2

使用 SQLPlus 和/或 PL/SQL 很难完成您尝试做的事情。

SQLPlus 是 Oracle 数据库的前端。其主要目的是针对 Oracle RDBMS 执行查询。

PL/SQL 是一种在 Oracle 中操作数据的语言。

相反,如果您想要一些与用户交互的东西,我建议您编写一个小脚本/程序,在此处插入您最喜欢的语言(可以是 python、C/C++、C#、Java),并使用 Oracle 连接来执行 SQL 查询或 PL /SQL 程序。

于 2009-12-04T22:39:20.850 回答
0

如果脚本完全不相关,我会使用简单的批处理文件或 shell 脚本。

于 2009-12-05T14:42:16.570 回答
0

我对此有一种真正的语言(根据巴勃罗的评论)。

您可以在 login.sql 中包含一些在您连接时显示列表建议的内容(PRINT 或 PROMPT SQL*Plus 语句)。

如果用户输入@1、@2 等(只要它们位于正确的目录中),您可能会有一堆名为 1.sql、2.sql 等的脚本运行。

但实际上 SQL*Plus 并不适合这种情况。

于 2009-12-05T00:38:46.350 回答
0

DBMS_OUTPUT可用于在屏幕上打印行。看起来它也具有执行 GET_LINE 的功能,但我从未使用过它,也不知道它们的工作情况如何。

您只需要注意您的 SQLPlus 设置。如果您没有正确设置它,它可能会截断行。

于 2009-12-04T22:39:22.877 回答