欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle單個字段多記錄拼接方式

 更新時間:2024年07月03日 09:47:24   作者:dongdong咚咚咚  
這篇文章主要介紹了Oracle單個字段多記錄拼接方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1.sql提供以下兩種查詢方式

來拼接同一個字段多個記錄結(jié)果

1.replace+wm_concat
2.listagg within group

兩種方式可實(shí)現(xiàn)一樣的效果。

快速腳本:替換 表名 與 字段名 執(zhí)行即可驗(yàn)證。

select (
-- 1.replace+wm_concat
select replace(wm_concat(a.name),',','|') from teacher_leader a
) res1,
-- 2.listagg within group
(
select listagg(a.name,'|') within group (order by a.name) from teacher_leader a
) res2
from dual; 

實(shí)測:

2.如果報(bào)錯

ORA-00904: “WM_CONCAT”: 標(biāo)識符無效

可進(jìn)行如下處理解決,定義type部分參考這篇文章

注意: 如果你沒有system用戶,可能是一個用戶擁有多個角色,那么上面的參考博客對你不適用。

可用下面的方案:

2.1作為SYSDBA角色登錄

2.2 給普通用戶授權(quán)

GRANT create type to shop;
GRANT create procedure to shop;

登錄shop(以普通用戶normal的身份登錄)

2.3 創(chuàng)建type并創(chuàng)建函數(shù)【wm_concat】

--在shop用戶作為normal角色會話下創(chuàng)建可用的wm_concat函數(shù),直接執(zhí)行以下語句
--定義類型
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;
/
--自定義行變列函數(shù):
CREATE OR REPLACE FUNCTION wm_concat(P1 VARCHAR2)
RETURN VARCHAR2 AGGREGATE USING WM_CONCAT_IMPL ;
/

2.4 最后一步,創(chuàng)建同義詞及授權(quán)

--創(chuàng)建完成,給其創(chuàng)建同義詞及授權(quán),以供其他用戶能正常使用。
create public synonym WM_CONCAT_IMPL for shop.WM_CONCAT_IMPL
/
create public synonym wm_concat for shop.wm_concat
/
grant execute on WM_CONCAT_IMPL to public
/
grant execute on wm_concat to public
/

驗(yàn)證

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論