【发布时间】:2020-11-02 08:05:01
【问题描述】:
我想从我的光标中检索 clob 值,并附加每个循环数据。我试图达到像这样的 clob 值
R_SER_HIZ_MST."XMLTYPE".GETCLOBVAL() 命令,但是当我将它与 DBMS_LOB.APPEND(CLOBTORETURN,v_TEMPLOB);一起使用时,我收到数字或值错误。我是否做错了什么或如何获取 clob 值并附加另一个 clob 然后从函数返回此 clob(在本例中为 CLOBTORETURN)?
我的 Plsql 函数代码:
CREATE OR REPLACE FUNCTION SOS_TABS.GET_CALL_LIST( P_IK_KOD IN VARCHAR2,
P_ORG_KOD IN VARCHAR2,
P_SER_KOD IN VARCHAR2)
RETURN VARCHAR2
IS
CURSOR C_SER_HIZ_MST (vc_servis_org_kod VARCHAR2, vc_servis_ser_kod VARCHAR2, vc_ekodenekbel_param VARCHAR2) IS
SELECT VALUE(table_temp) AS "XMLTYPE"
FROM XMLTABLE ('/ROWSET/ROW' PASSING
DBMS_XMLGEN.GETXMLTYPE('
SELECT *
FROM SER_HIZ_MST "shm"
INNER JOIN SER_SERVIS_TNM "sst1"
ON "shm".ORG_KOD = "sst1".ORG_KOD
AND "shm".SER_KOD = "sst1".SER_KOD
INNER JOIN SER_BELGE_TIP_TNM "sbtt"
ON "shm".BELGE_KOD = "sbtt".BELGE_KOD
INNER JOIN SER_SEHIR_TNM "sst"
ON "shm".ULKE_KOD = "sst".ULKE_KOD
AND "shm".SEHIR_KOD = "sst".SEHIR_KOD
INNER JOIN SER_ILCE_TNM "sit"
ON "shm".ULKE_KOD = "sit".ULKE_KOD
AND "shm".SEHIR_KOD = "sit".SEHIR_KOD
AND "shm".ILCE_KOD = "sit".ILCE_KOD
INNER JOIN SER_MUSTERI_TNM "smt"
ON "shm".MUS_ID = "smt".ID
WHERE "sst1".ORG_KOD = (CASE WHEN ''' || vc_servis_org_kod || ''' IS NOT NULL THEN ''' || vc_servis_org_kod || ''' ELSE NULL END
)
AND "sst1".SER_KOD = (
CASE WHEN ''' || vc_servis_ser_kod || ''' IS NOT NULL THEN ''' || vc_servis_ser_kod || ''' ELSE NULL END
)
AND "shm".IK_KOD = ''' || P_IK_KOD || '''
AND "sbtt".BELGE_KOD = ''' || vc_ekodenekbel_param || '''
AND "shm".DURUM = ''ACIK''
')
) table_temp;
v_TEMPLOB CLOB;
CLOBTORETURN CLOB;
BEGIN
dbms_lob.CREATETEMPORARY(CLOBTORETURN,TRUE);--iniatialize clobtoreturn here
dbms_lob.open(CLOBTORETURN, DBMS_LOB.LOB_READWRITE);
dbms_lob.append(CLOBTORETURN, '{"results":[');
FOR R_SER_HIZ_MST IN C_SER_HIZ_MST(V_SERVIS_ORG_KOD, V_SERVIS_SER_KOD, V_EKODENEKBEL_PARAM)
LOOP
SELECT R_SER_HIZ_MST."XMLTYPE".GETCLOBVAL() INTO v_TEMPLOB FROM DUAL;
DBMS_LOB.APPEND(CLOBTORETURN,v_TEMPLOB);
END LOOP;
RETURN CLOBTORETURN;
END;
我的环境:Oracle 11g 数据库
【问题讨论】: