【问题标题】:#Oracle#PL/SQL:Substitution variables for multiple inputs#Oracle#PL/SQL:多个输入的替换变量
【发布时间】:2015-10-17 00:51:46
【问题描述】:

我想多次从用户那里获取输入,为此我正在使用替换变量但无法获得所需的输出。我希望 oracle 根据循环条件多次要求用户输入。例如,

    declare
    names varchar2(100);

    begin
    for j in 1..3 loop
    names:='&i';
    dbms_output.put_line(j ||names);
    end loop;

    end;
    /

----------输出------

 1jack
 2jack
 3jack

请提出一些替代方案。

【问题讨论】:

  • 第一句的措辞有点混乱。
  • 你不能合理。 PL/SQL 没有提示用户输入的功能。这必须由客户端应用程序完成。 SQLPlus 具有非常有限的提示输入的功能,并且它没有编写循环代码的功能。您可以构建一个非常不寻常/复杂的 SQLPlus 脚本来模拟循环,但编写批处理文件/shell 脚本/perl 脚本/其他提示输入并向数据库发送查询的东西会容易得多.
  • @ppperry :如果我运行此块,Oracle 将要求用户提供输入,该值将存储在变量名称中,并在上述情况下显示三次。我希望 oracle 询问用户输入三次,以便打印不同的名称。请帮助我。

标签: oracle plsql oracle11g oracle10g plsqldeveloper


【解决方案1】:

您可以使用参数列表作为集合构造函数参数。您不可能一次一个地输入值。

HUSQVIK@orcl> DECLARE
  2     TYPE t IS TABLE OF VARCHAR2(32767);
  3     names t := t(&names);
  4  BEGIN
  5      FOR j IN 1..names.COUNT LOOP
  6             dbms_output.put_line(j || names(j));
  7      END LOOP;
  8  END;
  9  /
Enter value for names: 'Jack', 'Niels', 'Tom'
1Jack
2Niels
3Tom

PL/SQL procedure successfully completed.

【讨论】:

  • 当我运行上述代码时,我收到以下错误错误报告:ORA-06550:第 3 行,第 28 列:PLS-00302:必须声明组件 'COUNT' ORA-06550:行3、第 9 列:PL/SQL:语句被忽略 06550. 00000 - “第 %s 行,第 %s 列:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动:
  • 奇怪。您使用的是哪个 Oracle 版本?也可以使用FOR j IN 1..names.LAST LOOP,在这种情况下没有区别。
  • 我正在使用 oracle 12C,我收到一个错误标识符“必须声明 Jack”
  • 更新后的代码出现同样的错误,PLS-00201:错误:必须声明标识符“Jack”并且 PLS-00320:错误:此表达式的类型声明不完整或格式错误
  • 使用Enter value for names: 'Jack', 'Niels', 'Tom' 作为参数NOT Enter value for names: Jack, Niels, Tom
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
相关资源
最近更新 更多