#Oracle#PL/SQL:多个输入的替换变量

Posted

技术标签:

【中文标题】#Oracle#PL/SQL:多个输入的替换变量【英文标题】:#Oracle#PL/SQL:Substitution variables for multiple inputs 【发布时间】: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 询问用户输入三次,以便打印不同的名称。请帮助我。 【参考方案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

以上是关于#Oracle#PL/SQL:多个输入的替换变量的主要内容,如果未能解决你的问题,请参考以下文章

Oracle PL/SQL,如何使用简单的替换变量和months_between计算出生日期的年龄

PL/SQL 游标的变量/文字替换?

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

Oracle PL/SQL 用户输入错误“未声明绑定变量”

在 Oracle APEX PL/SQL 中传递变量

Oracle PL/SQL:在 SAMPLE 子句中使用变量时出现语法错误