如何使用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
答案 0 :(得分: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表示您的表列名称。 如果您的选择查询只返回一行,则上述代码将起作用。如果它返回多行,我们必须使用另一种方法。如果您需要,我会发布该代码。
修改强> 如果select查询将返回多行,则以下代码将起作用。对于多行,我们必须在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;