select count(*) into total from t1 where c1 in '||p1||';
----------------------------------------------------------
select f1('('''a'',''f'',''e'')') from dual;
----------------------------------------------------------
select f1('('''a'',''f'',''e'')') from dual;
解决方案 »
- Oracle中触发器问题
- 连接远程数据库,网络忽然断开,程序崩溃
- odp.net的OracleConnection中未提供清空连接池的方法,请问如何清空?
- 无法解析指定的连接标识符
- 请教一个循环条件
- 一天一夜没睡觉了,急死了!!!ORACLE数据库中有两个表不能插入数据,查询的时候需要几个小时,怎么办?经过检测,表也没有被锁!
- 如何查看包里面的有些什么函数和过程
- 备份数据库
- 请问各位大侠!!我怎么在过程中无法访问sys.dba_data_files这个表呢.用单独的SQL语句都可以查看!(都在同一用户下)
- 又是关于8.17的问题
- 那里有Oracle函数,急!急!急!急!
- 有谁碰到这样的问题(oracel安装),急?
-- ---
1 0
2 1
3 1
4 2
5 3
6 4
6 57 rows selectedcreate or replace function f1(p1 in varchar2)
return number
is
total number;
str varchar2(50);
begin
str:='select count(1) from aa where id in ('||p1||')';
execute immediate str into total;
return total;
exception
when no_data_found then
return 0;
end;
/SQL> select f1('''0'',''1'',''2''') from dual;F1('''0'',''1'',''2''')
-----------------------
2你的函数修改如下:
create or replace function f1(p1 in varchar2)
return number
is
total number;
str varchar2(50);
begin
str:='select count(*) from t1 where c1 in ('||p1||')';
execute immediate str into total;
return total;
exception
when no_data_found then
return 0;
end;
有可以不使用动态sql语句的方法吗?我实际用的的存储过程非常复杂,如果都写成动态的,太复杂了。实在不行,先将参数写进一个临时表中,再通过in (select c1 from temptable),
不过不知道是否有其它的方法?
比如你的分析函数名为:test,则可以这样:
select count(*) into total from t1 where c1 in (test(p1));或
select count(*) into total from t1 where c1 in (select test(p1) from dual);
我试过了,如果 in(test(p1))中test(p1)的返回值是varray,提示类型不匹配错误,不知能不能提供代码,我现在很急,十分感谢!
create or replace function name_f(p_id in varchar2)
return varchar2
as
str varchar2(20);
num number;
n number:=0;
begin
num:=instr(p_id,',');
loop
if num>0 then
n:=n+1;
str:=str||substr(p_id,1,num-1)||',';
num:=instr(p_id,',',1,n);
else
str:=p_id;
exit;
end if;
end loop;
if instr(str,',',-1,1)=lengthb(str) then
str:=substr(str,1,lengthb(str)-1);
end if;
return str;
end;
/在这里它根本就认为一个字串,怎样也分不开。
SQL> select count(1) from aa where id in (name_f('0,1,2')); COUNT(1)
----------
0
在这里,单独一个值就可以
SQL> select count(1) from aa where id in (name_f('2')); COUNT(1)
----------
1从中有一个想法,若然能返回个值,而且返回个数动态变的,那有可能实现你功能。