PL/SQL Oracle 10g 询问用户输入(替代变量除外)

Posted

技术标签:

【中文标题】PL/SQL Oracle 10g 询问用户输入(替代变量除外)【英文标题】:PL/SQL Oracle 10g Ask user for input (other than substitution variable) 【发布时间】:2015-03-23 09:19:03 【问题描述】:

伪代码:

declare
    n number(10);
begin
    dbms_output.put_line('Welcome to Oracle');
    dbms_output.put_line('1. Insert');
    dbms_output.put_line('2. Delete');
    dbms_output.put_line('Choose an option');

    n:=&choice;

    if(n=1)
        .....
        .....
    else
        ....
        ....
    end if;
end;

我在这里遇到了问题。当我尝试运行它时,它首先会询问“&choice”,然后它会显示 dbms_output.put_line() 语句。

但我想先显示选择,然后询问用户的输入。

示例输出(我想要的):

 Welcome to Oracle
 1. Insert
 2. Delete
 Choose an option:
 Enter the value for choice:

那么解决这个问题的方法是什么?有没有其他方法可以接受用户的输入?

提前致谢。

【问题讨论】:

你不能在 PL/SQL 中这样做,因为它不是交互式的。 【参考方案1】:

PL/SQL 不是交互式的,所以你不能在 PL/SQL 中这样做。

使用& 提示用户输入是SQL*Plus 命令,而不是PL/SQL。 PL/SQL在数据库引擎内部执行,无法访问终端窗口SQL DeveloperGUI工具

话虽如此,你可以传递参数。

例如,

SQL> SET serveroutput ON
SQL> DECLARE
  2    prompt_input NUMBER;
  3  BEGIN
  4    dbms_output.put_line('Welcome to Oracle');
  5    dbms_output.put_line('1. Insert');
  6    dbms_output.put_line('2. Delete');
  7    dbms_output.put_line('Choose an option');
  8    prompt_input := '&1';
  9    IF prompt_input = 1
 10    THEN
 11    dbms_output.put_line('You have selected '||prompt_input||' .Insert');
 12    ELSE
 13    dbms_output.put_line('You have selected '||prompt_input||' . Delete');
 14    END IF;
 15  END;
 16  /
Enter value for 1: 1
old   8:   prompt_input := '&1';
new   8:   prompt_input := '1';
Welcome to Oracle
1. Insert
2. Delete
Choose an option
You have selected 1 .Insert

PL/SQL procedure successfully completed.

SQL>

【讨论】:

同意。如果 OP 有解决方案需要这种交互性,PL/SQL 肯定不是问题的解决方案。 @mmmmmpie,是的,OP 需要为用户提供一个接口来输入数据,就像任何其他应用程序一样。

以上是关于PL/SQL Oracle 10g 询问用户输入(替代变量除外)的主要内容,如果未能解决你的问题,请参考以下文章

使用 PL/SQL 过程在 oracle 10g 中转储表

oracle 10g pl/sql 有条件的循环选择

如何在 java 中使用 jdbc 为 oracle 10g 执行 log miner PL/SQL 查询

如何从 Oracle 10G PL/SQL 函数和过程中查找所有表引用? [复制]

如何一键提示两个命令? pl/sql oracle 10g 表单生成器

如何使用触发器在同一张表中插入新行(Oracle PL/SQL 10G)?