以下是一个函数想实际该功能:
(codes varchar2) return varchar2
as
namecns varchar2(500);
strSql varchar2(500);
begin
strSql := 'select name_cn from yf_project_phase where (instr('''||codes||''',code)>0)';
EXECUTE IMMEDIATE strSql into namecns;
return namecns;
end;但该函数只能取一条记录的数据,不能取到多个记录的数据,想请各位帮忙改一下,以实现我想要的功能,谢谢了!
(codes varchar2) return varchar2
as
namecns varchar2(500);
strSql varchar2(500);
begin
strSql := 'select name_cn from yf_project_phase where (instr('''||codes||''',code)>0)';
EXECUTE IMMEDIATE strSql into namecns;
return namecns;
end;但该函数只能取一条记录的数据,不能取到多个记录的数据,想请各位帮忙改一下,以实现我想要的功能,谢谢了!
解决方案 »
- 语法应该没什么问题啊
- OracleCSService 超长时间启动,寻求解决方法。
- 请教各位老大,oracle+excel问题
- 不显示删除回复显示所有回复显示星级回复显示得分回复 用SQL查询数据库中不存在的数据?
- 请问net8配置的概要文件中的"Oracle Advanced Security"
- 这个sql语句怎么来写?
- 关于查询语句问题请教
- 请问在oracle存储过程中如何声明一个二维数组
- oracle 11g nvarchar 索引不生效
- 查询判断字段是否为整数,不为整数赋值0
- 58减去(当前系统时间-人员出身日期)<=4 个月,请问如何用oracel语言实现呢??
- 请教高手我如何将提取出的数据为空值的替代为0
instr(code, codes) > 0 或者 code like '%'||codes||'%'都可以完成任务了。例:(v_code varchar2) return varchar2 is
namecns varchar2(500);
begin
for x in (select name_cn from yf_project_phase where instr(code, v_code)> 0) loop
namecns := namecns || x.name_cn ||',';
end loop;
namecns := rtrim(namecns, ','); -- 去掉最后一个逗号.
return namecns;
end;
type r_name is record(name emp.ename%type);
type t_name is table of r_name%rowtype;function f_name (dept_id dept.deptno%type) return t_name
as
rt_name t_name;
begin
s_sql := 'select emp.ename bulk collect into rt_name from emp, dept where emp.deptno=dept_id';
EXECUTE IMMEDIATE s_sql;
return rt_name;
end;declare
rt_name t_name;
begin
rt_name := f_name(10);
for i in 1 .. rt_name.count loop
dbms_output.putline(rt_name(i).name);
end;
其实这个问题的关键就是使用一个循环, 但是要注意的是, 你返回多个记录时, 应该是用连接字符串将所有数据一起输出, 切变量要足够大, 因为函数只返回一个变量.
declare
type r_name is record(name emp.ename%type, deptno dept.deptno%type);
type t_name is table of r_name INDEX BY BINARY_INTEGER;
rt_name t_name;
begin
rt_name(1).name := 'ddddd';
rt_name(1).deptno:=1;
rt_name(2).name :='ffff';
rt_name(2).deptno:=2;
rt_name(3).name :='eeee';
rt_name(3).deptno:=3;
for i in 1 .. rt_name.count
loop
dbms_output.put_line(rt_name(i).name);
end loop;
end;