各位前辈,小弟新学oracle,现在要实现这样一个功能。比如有个person表,有这么几个字段,id、name、sex、address、age、.....我有一个存储过程,可以接收一个参数叫my_type.现在我要根据这个my_type,对不同的字段进行排序。select * from person (case my_type when '2' then name when '3' then sex end);上面这条语句可以执行,没有任何问题,就是当参数my_type为2时,则按照name排序,当参数为3时,按照sex排序。但现在实际的需求是要按两个字段来排序。就是当参数为2时,按照name和sex排序,当参数为3时,按照address和age排序。我写了如下的语句
select * from person (case my_type when '2' then name,sex when '3' then address,age end);但是这条语句会报错,请教各位前辈,应该怎么修改呢?
select * from person (case my_type when '2' then name,sex when '3' then address,age end);但是这条语句会报错,请教各位前辈,应该怎么修改呢?
tsql := 'select dept_code from a03
order by (case :arg when 2 then 1,2 when 3 then 3,4 end)';execute immediate tsql using arg;
不过在存储过程里面可以这么写。
declare
type person_table_type is table of person%rowtype;
person_table person_table_type;
my_type varchar2(1) := '3';
sqltxt varchar2(1000);
begin
sqltxt := 'select * from emp';
if my_type='2' then
sqltxt := sqltxt || ' order by name, sex;';
elsif my_type='3' then
sqltxt := sqltxt || ' order by address, age;';
end if;
dbms_output.put_line(sqltxt);
execute immediate sqltxt bulk collect into person_table;
end;
必须
select xxx into zzz from yyy
select xxx bulk collect into into zzz from yyy
类似这样的语句才行。