2

如何使用 SQLTools v1.6 提示用户在 oracle 中输入?我尝试了以下 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
4

1 回答 1

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;
于 2015-08-12T05:02:03.920 回答