如何在oracle中使用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
对代码的小修改
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;