declare type NVARRY is varray(5) of number; v_var NVARRY := NVARRY(1,2,3,4,5); begin for i in (select col1 from t ) loop for j in 1..v_var.count loop if v_var(j) = i.col1 then ... end if; end loop; end loop; end;
与数组比较的问题 DECLARE TYPE Char_Type_Table IS TABLE OF VARCHAR2(256) INDEX BY BINARY_INTEGER; my_array Char_Type_Table; v_b1 VARCHAR2(10); CURSOR C1 IS SELECT b1 FROM b; BEGIN my_array(1) := '01'; my_array(2) := '02'; my_array(3) := '03'; open c1; loop fetch c1 into v_b1; exit when c1%notfound; /*在这里,怎么样才能使用一个语句实现形如 if v_b1 in ('01,'02','03') then .... end if;*/ 来实现与数组的比较呢?????? if v_b1 in my_array then ???? .... end if; end loop; close c1; end; / 请教各位,能否使用一个语句使一值直接与数组比较呢?
shiyiwan,我的数据库是8I,能支持你的写法不? 其实我就是想这样: /*在这里,怎么样才能使用一个语句实现形如 if v_b1 in ('01,'02','03') then .... end if;*/ 来实现与数组的比较呢?????? if v_b1 in my_array then ????
也不是一个语句,就是用procedure ,里面的那句有没有别的写法?
for j in 1..v_var.count loop if v_var(j) = i.col1 then ... end if; end loop;這個內循環就已經做比較了呀
LZ是要把数组传到数据库,然后用一个语句来查询出来吧这种问题我们是这样处理的: 把数组中的多个值(可能是不定长数组)组成一个字符串instr,然后 select * from table_x where c_y in instr 这样就可以了 具体的in 后的字符串要根据前台代码来写, 比如用C#调用查询结果时, 先 定义好一个字符串sqlstr:='select * from table_x where c_y in ( '; sqlstr:=sqlstr|| instr||' )';open cursor for sqlstr; 这样就OK了
CREATE TYPE phone AS TABLE OF NUMBER; / CREATE TYPE phone_list AS TABLE OF phone; /SELECT t.COLUMN_VALUE from table(phone(1,2,3)) t;COLUMN_VALUE ------------ 1 2 3注意那个table表达式,关联查询一下就可以了还有一个方法,直接在where 语句里面写 where xx in yourarray即可
type NVARRY is varray(5) of number;
v_var NVARRY := NVARRY(1,2,3,4,5);
begin
for i in (select col1 from t ) loop
for j in 1..v_var.count loop
if v_var(j) = i.col1 then
...
end if;
end loop;
end loop;
end;
DECLARE
TYPE Char_Type_Table IS TABLE OF VARCHAR2(256) INDEX BY BINARY_INTEGER;
my_array Char_Type_Table;
v_b1 VARCHAR2(10);
CURSOR C1 IS SELECT b1 FROM b;
BEGIN
my_array(1) := '01';
my_array(2) := '02';
my_array(3) := '03';
open c1;
loop
fetch c1 into v_b1;
exit when c1%notfound;
/*在这里,怎么样才能使用一个语句实现形如
if v_b1 in ('01,'02','03') then
....
end if;*/
来实现与数组的比较呢??????
if v_b1 in my_array then ????
....
end if;
end loop;
close c1;
end;
/
请教各位,能否使用一个语句使一值直接与数组比较呢?
其实我就是想这样:
/*在这里,怎么样才能使用一个语句实现形如
if v_b1 in ('01,'02','03') then
....
end if;*/
来实现与数组的比较呢??????
if v_b1 in my_array then ????
if v_var(j) = i.col1 then
...
end if;
end loop;這個內循環就已經做比較了呀
把数组中的多个值(可能是不定长数组)组成一个字符串instr,然后
select * from table_x where c_y in instr 这样就可以了
具体的in 后的字符串要根据前台代码来写,
比如用C#调用查询结果时,
先 定义好一个字符串sqlstr:='select * from table_x where c_y in ( ';
sqlstr:=sqlstr|| instr||' )';open cursor for sqlstr;
这样就OK了
/
CREATE TYPE phone_list AS TABLE OF phone;
/SELECT t.COLUMN_VALUE from table(phone(1,2,3)) t;COLUMN_VALUE
------------
1
2
3注意那个table表达式,关联查询一下就可以了还有一个方法,直接在where 语句里面写
where xx in yourarray即可
8楼的:我是想 从数据库里取值出来跟一个数组里的值 比较呢~跟你的那个相反。