您可以创建动态查询,并使用execute immediate进行单行提取,使用cursor进行多行提取。示例代码如下:
declare
str varchar2(3200);
str1 varchar2(10):=1;
v1 VARCHAR2(20);
v2 VARCHAR2(20);
v3 VARCHAR2(20);
str2 varchar2(1000);
begin
str2:='SELECT t2.c1,t2.c2,t2.c3 FROM ';
if str1=3 then
str:= 't1,t2,t3 where t1.c1=t2.c1 and t2.c1=t3.c1 and t1.c1=p_first ;' ;
elsif str1=2 then
str:=' t1,t2,t4 where t1.c1=t2.c1 and t2.c1=t4.c1 and t2.c1=p_second ;' ;
else
str:='t2 where t2.c1=p_second ;';
end if;
str2:=str2 || str;
dbms_output.put_line(str2);
EXECUTE IMMEDIATE str2 into v1,v2,v3;
dbms_output.put_line(v1||','||v2||','||v3);
end;