#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计算出生日期的年龄