UDF (SQL SCALAR FUNCTION)

polarbeargirl 2011-02-20 06:16:30
输入是一个整数, ID, 输出是一个NAME VARCHAR(500), 几个NAME 可以共同拥有同一个ID. 输出的就是把几个NAME 用逗号分开, 放到同一个VARCHAR里面. 查了好久怎么写SQL FUNCTION, 从不同的网站拼拼凑凑, 可是还是没有头绪, 报的错又看不懂... 想请大虾们帮帮忙改一下.~

比如, 输入班级ID, 输出是这个班里所有的学生名字, 用一个VARCHAR 用逗号隔开.

想问:



CREATE FUNCTION TEST (PID INTEGER) RETURNS VARCHAR(100)
LANGUAGE SQL
SPECIFIC TEST
DETERMINISTIC
CONTAINS SQL

BEGIN ATOMIC

DECLARE WORDS VARCHAR(500);
DECLARE CURRENT_WORD varchar(100);

FOR_LOOP: FOR EACH ROW AS C CURSOR FOR SELECT WORD FROM QA.CLASS WHERE PHRASE_ID=PID

IF... THEN
SET CURRENT_WORD = EACH_ROW.WORD;
WORDS = WORDS || CURRENT_WORD || ',';
ELSE
LEAVE FOR_LOOP;
END;

RETURN WORDS;

END;

那个FOR LOOP好象不可以那么写是吗? 我还试了:
FOR CUR1 AS SELECT WORD FROM QA.CLASS WHERE PHRASE_ID=PID
可是他老说这前面要加空格(我已经加了啊..好象空多少行都没用..)
...全文
91 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaojianmi1 2011-02-21
  • 打赏
  • 举报
回复
这个不需要用函数,可以直接用一个公用表表达式(CTE)来实现

具体搜索:db2 with 递归
quiettown 2011-02-20
  • 打赏
  • 举报
回复
你这个东东错的还很多的,除了这。。。
FOR试试:
[code=SQ]
for c1 as select word from class where phrase_id = pid
do
if 1 = 1 then
set words = words || word || ',';
else
return words;
end if;
end for;
[/code]

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧