Oracle将一列值逗号拼接wm_concat函数
2024-10-20 00:39:19
--Oracle12c不再支持该函数,需要手动处理
--管理员登录授权给用户权限
GRANT CREATE SYNONYM TO c##sdic;
/
--创建 TYPE
CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT
(
CURR_STR VARCHAR2(32767),
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,
P1 IN VARCHAR2) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,
RETURNVALUE OUT VARCHAR2,
FLAGS IN NUMBER)
RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,
SCTX2 IN WM_CONCAT_IMPL) RETURN NUMBER
);
/
--定义类型body:
CREATE OR REPLACE TYPE BODY WM_CONCAT_IMPL
IS
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL)
RETURN NUMBER
IS
BEGIN
SCTX := WM_CONCAT_IMPL(NULL) ;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,
P1 IN VARCHAR2)
RETURN NUMBER
IS
BEGIN
IF(CURR_STR IS NOT NULL) THEN
CURR_STR := CURR_STR || ',' || P1;
ELSE
CURR_STR := P1;
END IF;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,
RETURNVALUE OUT VARCHAR2,
FLAGS IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURNVALUE := CURR_STR ;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,
SCTX2 IN WM_CONCAT_IMPL)
RETURN NUMBER
IS
BEGIN
IF(SCTX2.CURR_STR IS NOT NULL) THEN
SELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR ;
END IF;
RETURN ODCICONST.SUCCESS;
END;
END;
/
--自定义行变列函数:
CREATE OR REPLACE FUNCTION wm_concat(P1 VARCHAR2)
RETURN VARCHAR2 AGGREGATE USING WM_CONCAT_IMPL ;
/
--创建同义词并授权
create public synonym WM_CONCAT_IMPL for sys.WM_CONCAT_IMPL
/
create public synonym wm_concat for sys.wm_concat
/
grant execute on WM_CONCAT_IMPL to public
/
grant execute on wm_concat to public
/
最新文章
- 读书笔记:JavaScript DOM 编程艺术(第二版)
- Win7 64位下PowerDesigner连接64位Oracle11g数据库
- 配合crond服务实现自定义周期备份MySQL数据库(使用innobackupex进行备份)
- ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等) ZT
- Linux-小命令技巧
- Linux 中的grep命令单引号,不加任何参数以及双引号的作用
- URLEncode与URLDecode总结与实现
- C++ 安全字符串拼接
- jQuery 中 children() 与 find() 用法的区别
- 图标的使用————JAVA——Swing
- 利用Meida Service的Java SDK来调用Azure Media Services的Index V2实现视频字幕自动识别
- jsp自定义标签分析
- java内存模型 年轻代/年老代 持久区
- windows server 2003 系统重装蓝屏
- js事件的相关收集
- 代码审计之XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)
- s2-045漏洞批量检测工具
- 使用Socket通信--测试叫号
- Mybatis if 判断等于一个字符串
- WDCP面板V3新版本安装与体验记录
热门文章
- 源代码管理SVN的使用
- JavaScript——class与原型对象
- Asp.Net 设计模式 之 “工厂方法”即利用 接口 实现的抽象工厂
- Java入门第38课——猜字母游戏之设计程序结构
- java.lang.IllegalArgumentException: Result Maps collection already contains value for com.zhmy.businessapi.mapper.CompanyMapper.BaseResultMap
- hdfs深入:10、hdfs的javaAPI操作
- Python:socket实现ftp程序
- linux 命令终端提示符显示-bash-4.2#解决方法
- MySQL-----改
- C语言学习3