头都大了,也没想出办法,请各位高手多多指点啊!代码如下:
例如程序如下:
create or replace procedure get_result(
cm_id in number,
cm_name in varchar2(16),
cm_age in smallint,
cm_room_num in smallint,
cm_money in number,
tmp_cursor out tmptype.t_cursor)
return number as
tmp_cm_name varchar2(16);
tmp_cm_id number;
tmp_cm_age smallint;
tmp_cm_room_num smallint;
tmp_cm_money number;
tmp_sql char(4000);
tmp_string varchar2(255);
begin
tmp_cm_name := ' ';
tmp_cm_id := 0;
tmp_cm_age := 0;
tmp_cm_room_num := 0;
tmp_cm_money := 0;
tmp_sql := ' ';
tmp_string := ' ';
tmp_string := cm_id || cm_name || cm_age || cm_room_num
|| cm_money;
if tmp_string <> ' ' then
tmp_sql := tmp_sql || 'select count(*) ' || tmp_string ;
else
tmp_sql := tmp_sql || ' select count(*)';
end if;
tmp_sql := tmp_sql || 'sun(cm_money) ' ;
tmp_sql := tmp_sql || ' from money_table a, member_info b
where a.member_id = b.member_id '; if cm_id <> 0 then
tmp_sql := tmp_sql || ' and a.member_id = cm_id ';
end if;
if cm_age <> 0 then
tmp_sql := tmp_sql || 'and a.member_age = cm_age ';
end if;
if cm_room_num <> 0 then
tmp_sql := tmp_sql || ' and a.member_room_num =
cm_room_num';
end if;
if trim(tmp_string) is not null then
tmp_sql:= tmp_sql|| ' group by ' || tmp_string|| '
order by ' || tmp_string;
end if; open tmp_cursor for tmp_sql;
return(0);
return(SQLCODE);
end get_result;
例如程序如下:
create or replace procedure get_result(
cm_id in number,
cm_name in varchar2(16),
cm_age in smallint,
cm_room_num in smallint,
cm_money in number,
tmp_cursor out tmptype.t_cursor)
return number as
tmp_cm_name varchar2(16);
tmp_cm_id number;
tmp_cm_age smallint;
tmp_cm_room_num smallint;
tmp_cm_money number;
tmp_sql char(4000);
tmp_string varchar2(255);
begin
tmp_cm_name := ' ';
tmp_cm_id := 0;
tmp_cm_age := 0;
tmp_cm_room_num := 0;
tmp_cm_money := 0;
tmp_sql := ' ';
tmp_string := ' ';
tmp_string := cm_id || cm_name || cm_age || cm_room_num
|| cm_money;
if tmp_string <> ' ' then
tmp_sql := tmp_sql || 'select count(*) ' || tmp_string ;
else
tmp_sql := tmp_sql || ' select count(*)';
end if;
tmp_sql := tmp_sql || 'sun(cm_money) ' ;
tmp_sql := tmp_sql || ' from money_table a, member_info b
where a.member_id = b.member_id '; if cm_id <> 0 then
tmp_sql := tmp_sql || ' and a.member_id = cm_id ';
end if;
if cm_age <> 0 then
tmp_sql := tmp_sql || 'and a.member_age = cm_age ';
end if;
if cm_room_num <> 0 then
tmp_sql := tmp_sql || ' and a.member_room_num =
cm_room_num';
end if;
if trim(tmp_string) is not null then
tmp_sql:= tmp_sql|| ' group by ' || tmp_string|| '
order by ' || tmp_string;
end if; open tmp_cursor for tmp_sql;
return(0);
return(SQLCODE);
end get_result;
...
begin
tmp_cm_name := ' ';
tmp_cm_id := 0;
tmp_cm_age := 0;
tmp_cm_room_num := 0;
tmp_cm_money := 0;
tmp_sql := ' ';
tmp_string := ' ';
tmp_string := cm_id || cm_name || cm_age || cm_room_num|| cm_money;
tmp_sql:='select count(*) '||decode(tmp_string,'','',tmp_string)||'sun(cm_money) ' ||
' from money_table a, member_info b where a.member_id = b.member_id '||
decode(cm_id,0,'',' and a.member_id = cm_id ')||
decode(cm_age,0,'','and a.member_age = cm_age ')||
decode(cm_room_num ,0,'','and a.member_room_num = cm_room_num ')||
decode(trim(tmp_string),null,'',' group by ' || tmp_string||
' order by ' || tmp_string; open tmp_cursor for tmp_sql;
return(0);
return(SQLCODE);
end get_result;