oracle写一个函数,参数是一个ID串,返回名称串

如题,我的目的是:在oracle查列表时,我数据库中又一个字段存的是一个ID串,类似‘id1,id2,id3’,中间逗号隔开的,所以要写一个函数把ID串转成名称串,类似‘... 如题,我的目的是:在oracle查列表时,我数据库中又一个字段存的是一个ID串,类似‘id1,id2,id3’,中间逗号隔开的,所以要写一个函数把ID串转成名称串,类似‘name1,name2,name3’.

我的想法是在函数中用ID串参数,一个select XX from xx where ID in(ID串参数); 然后再循环拼成名称串。

现在问题是:我无论是直接用参数还是转换 把‘id1,id2,id3’ 转成 ‘id1’,'id2','id3'这种形式,select都查不出东西,但是把参数写死就查得出来,我知道是拼的形式不对,单引号的问题,但怎么改都不对。

注意:我是直接在oracle中写函数,不经过java程序。

求助,你运行成功后再告诉我
或者你有更好的方法也可,另一种方法估计就是把ID串拆成一个一个,然后循环查,不过我还没做出来。
急等好心人。多谢!附图一张:
展开
 我来答
匿名用户
推荐于2016-01-27
展开全部


CREATE TABLE Test (
  id    nvarchar2(6),
  name  nvarchar2(10)
);

INSERT INTO Test values( 'id1', 'name1');
INSERT INTO Test values( 'id2', 'name2');
INSERT INTO Test values( 'id3', 'name3');
INSERT INTO Test values( 'id4', 'name4');
INSERT INTO Test values( 'id5', 'name5');


CREATE OR REPLACE FUNCTION Get_Test_Name( p_id_data  in NVARCHAR2) RETURN NVARCHAR2 AS
  TYPE   refcursor IS REF CURSOR;
  v_cursor  REFCURSOR;
  v_name   NVARCHAR2(10);
  v_result   NVARCHAR2(1000);
  v_id_dada  NVARCHAR2(1000);
  v_SQL  VARCHAR2(1000);
BEGIN
  v_id_dada := REPLACE(p_id_data, ',', ''',''');
  v_id_dada :=  '''' || v_id_dada ||  '''';
  v_result := '';
  v_SQL := 'SELECT name FROM Test WHERE ID IN (' || v_id_dada || ')';  
  
  -- 打开游标.
  OPEN v_cursor FOR v_SQL;
  LOOP
    -- 填充数据.
    FETCH v_cursor INTO v_name;
    -- 无数据时 退出循环.
    EXIT WHEN v_cursor%NOTFOUND;  
v_result := v_result || v_name|| ',';
  END LOOP;
  -- 关闭游标.
  CLOSE v_cursor;
  v_result := TRIM(BOTH ',' FROM  v_result);
  RETURN v_result;
END;
/

COLUMN "A" FORMAT A10
COLUMN "B" FORMAT A15
COLUMN "C" FORMAT A20
COLUMN "D" FORMAT A25


SQL> SELECT 
  2    Get_Test_Name('id1')  A,
  3    Get_Test_Name('id1,id2')  B,
  4    Get_Test_Name('id1,id2,id3')  C,
  5    Get_Test_Name('id1,id2,id3,id4')  D
  6  FROM dual;

A          B               C                    D
---------- --------------- -------------------- -------------------------
name1      name1,name2     name1,name2,name3    name1,name2,name3,name4

追问
给我讲讲道理? 我那个哪里有问题……求教~~!!
追答
因为你那里的游标的 sql 语句, 无法执行。
你需要用 动态 SQL 的方式, 来执行那一段 sql 语句。

否则, 查询的时候, 认为是 in ( 一个字符串 ), 而这个字符串, 又是表里面没有的, 那么就返回空白了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式