求一段字符串截取的Pl/sql

[复制链接]
查看11 | 回复9 | 2007-4-25 04:02:08 | 显示全部楼层 |阅读模式
小弟做java开发的,对ORACLE pl/sql不甚了解,现项目中需要用一段函数,求各位大侠帮忙,感激不尽!
现有一 项目参与人的字段PROJECT_IN_PEOPLE 字符类型,里面存储的内容如下:
CP860040,SAL67,CP690041
存的是对应人员的ID号码,因为人员数量不确定,
有可能没有,
有可能一个或者多个,
现在页面上显示的也是ID号码,客户要求显示人名,
所以涉及到ORACLE字符串截取,然后去查用户表POR_USER的操作
如执行:
FUNCTION('CP860040,SAL67,CP690041')后,返回
张三,李四,王五
希望高人帮助,万分感谢!
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
这表谁设计的啊
写函数的确很简单:切割,合并,返回即可
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
写个吧,当然sql也能实现你的需求,不过还是函数简单点,异常判断自己加吧
CREATE OR REPLACE
FUNCTION convert_name_list( p_string IN VARCHAR2 ,p_delimiter IN VARCHAR2 default ',' )
RETURN VARCHAR2
AS
l_stringLONG DEFAULT p_string || p_delimiter;
l_id POR_USER.ID%TYPE;
l_name POR_USER.NAME%TYPE;
l_result VARCHAR2(32767);
n
NUMBER;
BEGIN
LOOP
EXIT WHEN l_string IS NULL;

n := instr( l_string, p_delimiter );


l_id :=

TRIM( substr( l_string, 1, n-1 ) );
SELECT NAME INTO l_name FROM POR_USER WHERE ID=l_id;
l_result := l_result||p_delimiter||l_name;
l_string := substr( l_string, n+1 );
END LOOP;
RETURN ltrim(l_result,p_delimiter);
END;
/
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
dingjun123 ,非常谢谢!
编译成功,但test的时候,说 CONVER_NAME_LIST compiled with errors,
奇怪的是,不显示任何有错误的地方~~~
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
所使用的软件版本如下:
oracle 10.2pl/sql developer 7.1
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
这表是我自己设计的,这样设计是不是不太合理,第一次做表设计,没什么经验,还请指教!
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
id
name
--------------------------
CP860040 张三
SAL67 李四
CP690041 王五
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
给你个纯java的解决办法
String pj=new String("'").concat(result.getString("PROJECT_IN_PEOPLE").replace(",","','")).concat("'");
String sql=" select * from POR_USER where id in (".concat(pj).concat(")");
然后执行sql就可以拉
:)
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
java你那么干也有问题啊,是动态SQL了,无法绑定变量
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
原帖由 dingjun123 于 2011-6-12 00:04 发表
java你那么干也有问题啊,是动态SQL了,无法绑定变量

大哥啊,你写的那段Pl/sql 虽然能编译,但无法Test 和执行啊!帮人帮到底啊大哥!再次感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行