共計(jì) 2018 個(gè)字符,預(yù)計(jì)需要花費(fèi) 6 分鐘才能閱讀完成。
本篇內(nèi)容介紹了“怎么在 Oracle12C 數(shù)據(jù)庫創(chuàng)建 wm_concat 函數(shù)”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
當(dāng)我們的程序需要連接 12C 數(shù)據(jù)庫時(shí),原本使用 wm_concat 函數(shù)的地方會出現(xiàn)報(bào)錯(cuò),這是由于 12C 已經(jīng)摒棄了 wm_concat 這個(gè)函數(shù),可以采取的辦法有使用 listagg 函數(shù)代替 wm_concat 函數(shù),但是程序中所有涉及 wm_concat 函數(shù)的地方都得改成 listagg 函數(shù)的寫法,所以為了減小修改程序的工作量,可以通過手工創(chuàng)建 wm_concat 函數(shù)來解決這個(gè)問題。
一、用 sys 用戶以 SYSDBA 身份登錄數(shù)據(jù)庫,執(zhí)行以下命
CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT
-- AUTHID CURRENT_USER 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
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL)
RETURN NUMBER
BEGIN
SCTX := WM_CONCAT_IMPL(NULL) ;
RETURN ODCICONST.SUCCESS;
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,
P1 IN VARCHAR2)
RETURN NUMBER
BEGIN
IF(CURR_STR IS NOT NULL) THEN
CURR_STR := CURR_STR || , || P1;
CURR_STR := P1;
END IF;
RETURN ODCICONST.SUCCESS;
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,
RETURNVALUE OUT VARCHAR2,
FLAGS IN NUMBER)
RETURN NUMBER
BEGIN
RETURNVALUE := CURR_STR ;
RETURN ODCICONST.SUCCESS;
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,
SCTX2 IN WM_CONCAT_IMPL)
RETURN NUMBER
BEGIN
IF(SCTX2.CURR_STR IS NOT NULL) THEN
SELF.CURR_STR := SELF.CURR_STR || , || SCTX2.CURR_STR ;
END IF;
RETURN ODCICONST.SUCCESS;
/
-- 自定義函數(shù)列表
CREATE OR REPLACE FUNCTION wm_concat(P1 VARCHAR2)
RETURN VARCHAR2 AGGREGATE USING WM_CONCAT_IMPL ;
/
二、創(chuàng)建同義詞并授權(quán)
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
/
“怎么在 Oracle12C 數(shù)據(jù)庫創(chuàng)建 wm_concat 函數(shù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實(shí)用文章!