select * from user_tab where user_id =arraylist传值给user_id 的是个动态数组可以吗?
如果arraylist里有2个值,一个是1,一个是2,则select 语句就查询user_id=1和user_id =2的所有信息
如果有3个值,select就在三个值之间查询所有信息
不知道我说明白没有
谢谢
如果arraylist里有2个值,一个是1,一个是2,则select 语句就查询user_id=1和user_id =2的所有信息
如果有3个值,select就在三个值之间查询所有信息
不知道我说明白没有
谢谢
select * from user_tab where user_id in (……);
但ORACLE对in列表有个数限制,最多1000个值。
2 /类型已创建。SQL> create or replace procedure show_list(
2 p_varlist in myvarray_list
3 )
4 is
5 str varchar2(50);
6 begin
7 for x in 1..p_varlist.count loop
8 dbms_output.put_line('p_varlist('||x||')='||p_varlist(x));
9 end loop;
10 end;
11 /过程已创建。SQL> exec show_list(myvarray_list('Oracle','DB2','Sql Server','mySql','DBA'));
p_varlist(1)=Oracle
p_varlist(2)=DB2
p_varlist(3)=Sql Server
p_varlist(4)=mySql
p_varlist(5)=DBAPL/SQL 过程已成功完成。
create or replace type numTableType as table of number
/ --这个函数,是把输入得字符串如'1,2,3,4'转换成number数组
create or replace function str2numList(
p_string in varchar2
) return numTableType
as
v_str long default p_string || ',';
v_n number;
v_data numTableType := numTableType();
begin
loop
v_n := to_number(instr( v_str, ',' ));
exit when (nvl(v_n,0) = 0);
v_data.extend;
v_data(v_data.count) := ltrim(rtrim(substr(v_str,1,v_n-1)));
v_str := substr(v_str, v_n+1);
end loop;
return v_data;
end;
/--
create or replace procedure proc_get_favorite(
in_session_key IN dat_ct_user_session.session_key%TYPE,
in_series_id_lst IN varchar2,
in_resolution IN dat_ct_series_status.resolution%TYPE,
out_cr_favorite OUT SYS_REFCURSOR,
out_flag OUT number
)
AS
begin
update dat_ct_user_session set last_access_time = SYSTIMESTAMP where session_key = in_session_key; if SQL%NOTFOUND then
out_flag := -1;
else
open out_cr_favorite for
select ss.series_id,s.series_name,ss.max_chapter_no,ss.end_status from dat_ct_series s,dat_ct_series_status ss
where s.series_id = ss.series_id
and s.status = 'A'
and ss.resolution = in_resolution
and ss.series_id in( --这里面的 THE是关键。
select * from
THE (select cast(str2numList(in_series_id_lst) as numtableType) from dual)
)
order by s.init_letter,s.series_name;
out_flag := 0;
end if; Exception when others then
raise;
end proc_get_favorite;
/
数组拆分,用逗号连接,付给变量。然后用动态语句执行查询。
for example:delcare
v_sql varhcar2(1000):= null;
i number :=0;
type user_list is table of varchar2(50);
user_name_list user_list; --值我就不赋了。仅做说明。
begin
for i in 1..user_name_list.count
loop
v_sql := v_sql || user_name_list(i);
end loop;execute immediate 'select * from table_name where user_name in ('||v_sql||')';end;
你也可以把那条select拿到你的c#里面啊。
然后:我希望的是 select * from ksdz_wo_head1 where new_order_no in(数组arraylist);
这样将数据查询出来!
谢谢了!
解决了再加100分答谢
你用循环遍历数组,拼接where后面的sql语句,你可以选择in也可以选择or
string newno=null;
for (int i = 0; i < alist.Count; i++)
{
if (i == 0)
{
newno = "'"+alist[0].ToString()+"'";
}
else
{
newno += ','+"'"+ alist[i].ToString()+"'";
}
strsql = "select * from ksdz_wo_head1 where new_order_no in ("+newno+")";
}我已经解决了!谢谢大家的指点和帮忙!我就是用拼接的方式来得到sql语句的!下面执行这个sql语句就可以了