【问题标题】:How to create a menu in SQLPlus or PL/SQL如何在 SQLPlus 或 PL/SQL 中创建菜单
【发布时间】:2010-12-23 10:25:43
【问题描述】:

我有几个脚本,我想从一个提供给 SQLPlus 用户的菜单开始。比如:

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

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

【问题讨论】:

    标签: oracle plsql sqlplus


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这是一个用于执行此操作的 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.
      

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

      【讨论】:

        【解决方案3】:

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

        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 中引用变量 variablename,与在 shell 脚本中使用 $variablename 的方式非常相似。如果 variablename 未定义,则 SQLPlus 会提示用户输入值。

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

        【讨论】:

          【解决方案4】:

          我有一个真正的语言来解决这个问题(根据 Pablo 的评论)。

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

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

          但实际上 SQL*Plus 并不适合这个。

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:

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

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

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

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

              【讨论】:

              • 您可以提示输入在通过 SQLPlus 运行的脚本中定义的变量。有关详细信息,请参阅我的答案,但这里有一个关于变量和 SQLPlus 的链接:orafaq.com/node/515
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-02
              • 2012-03-24
              • 1970-01-01
              • 2012-02-27
              • 1970-01-01
              相关资源
              最近更新 更多