提示用户在 oracle 中输入

Posted

技术标签:

【中文标题】提示用户在 oracle 中输入【英文标题】:Prompt a user for input in oracle 【发布时间】:2015-08-12 04:47:45 【问题描述】:

如何使用 SQLTools v1.6 ?我尝试了以下 PL/SQL 块:

DECLARE 
 type tes_tab is table of test_table%rowtype;
 test_tab tes_tab;    
BEGIN

  execute immediate 'SELECT * FROM test_table WHERE memid=' || &MemID
       bulk collect into test_tab;

  for i in 1..test_tab.count 
  loop
    dbms_output.put_line(test_tab(i).memid || ' ' || test_tab(i).clmtype);
  end loop;

END;

它在编译时提示用户输入。但是,该值不能在 select 语句中使用。有没有其他方法可以实现我的目标。

该表包含 852269 条记录,其中单个 memID 的多行(我在这里提供了几行):

 MEMID       CLMTYPE   PAIDAMT   SERVICEDATE           PAIDDATE
----------- --------- --------- --------------------- ---------------------
 220000096   RX         77.22    06.05.2011 00:00:00   27.05.2011 00:00:00
 220000096   RX         77.22    04.02.2011 00:00:00   27.02.2011 00:00:00
 220000096   RX         93.36    01.01.2011 00:00:00   27.01.2011 00:00:00
 220000096   RX         15.07    09.08.2012 00:00:00   07.09.2012 00:00:00
 220000096   RX        105.52    06.01.2012 00:00:00   04.02.2012 00:00:00
 220000096   RX         93.36    02.03.2011 00:00:00   27.03.2011 00:00:00
 220000096   RX        105.52    09.11.2011 00:00:00   09.12.2011 00:00:00
 220000096   RX        105.52    10.03.2012 00:00:00   13.04.2012 00:00:00
 220000096   RX         50.52    06.04.2011 00:00:00   27.04.2011 00:00:00

【问题讨论】:

【参考方案1】:

对代码的小修改

DECLARE 
  vblMemID test_table%rowtype;
BEGIN
  EXECUTE IMMEDIATE'SELECT * FROM test_table WHERE memid='||&MemID into vblMemID ;
dbms_output.put_line(vblMemID.column1_name||' '||vblMemID.column2_name);
END;

注意: Column1_name 和 column2_name 表示您的表列名。 如果您的选择查询仅返回一行,则上述代码将起作用。如果它返回多行,我们必须使用另一种方法。如果您需要,我会发布该代码。

编辑 如果选择查询将返回多行,则以下代码将起作用。对于不止一行,我们必须在 oracle 中使用集合或 sysref 游标。

DECLARE 
 type tes_tab is table of test_table%rowtype;
test_tab tes_tab;
BEGIN

execute immediate 'SELECT * FROM test_table WHERE memid='||&MemID bulk collect into test_tab;

for i in 1..test_tab.count 
loop
dbms_output.put_line(test_tab(i).column1_name||' '||test_tab(i).column2_name);
end loop; 
END;

【讨论】:

该表有五列。而且我需要像你说的那样为单个 MemID 显示多行。 @hsuyaa 是否需要动态执行选择查询? 是的,它必须是动态的。 现在您可以显示五列。并根据您的要求编辑 dbms_output 语句。 没有按预期工作。它说,'column2_name(我的表中的 clmtype) 没有声明'。

以上是关于提示用户在 oracle 中输入的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库导入问题 输入用户和密码报错1017 提示无效的USER/PASSWORD 但是这个用户名密码能连上数据库

oracle 11g 的SQL的用户名和口令是啥,而且用户名可以输入但是口令为啥输入不了???

oracle解锁oracle默认用户scott

oracle中如何修改用户名和密码

怎样将oracle10g数据库里面的表导入到11g中

查询oracle数据库所有用户的sqlplus命令是啥