For 循环不会 return 在 oracle 过程中产生正确的格式

For loop does not return result in correct format in oracle procedure

我写了下面的程序,我想在其中 return 输出变量值 brand_name.BRAND_NAME。我得到正确的输出。但我想 return 以正确的格式。例如现在我得到的输出没有 header 'BRAND_NAME' 作为

,FNC,LIDL

但我想 return header 'BRAND_NAME' 的输出为:

BRAND_NAME: FNC,LIDL

这是我的存储过程:

FUNCTION BUILD_ALERT_EMAIL_BODY
(
  IN_ALERT_LOGS_TIMESTAMP IN TIMESTAMP
, IN_ALERT_LOGS_LOG_DESC IN VARCHAR2
, IN_KPI_LOG_ID IN NUMBER
) RETURN VARCHAR2 AS
BODY VARCHAR2(4000) := '';
V_KPI_DEF_ID NUMBER := '';
V_KPI_TYPE VARCHAR2(100) := '';
V_KPI_NAME VARCHAR2(100) := '';
V_BRAND_NAME VARCHAR2(100) := '';
V_KPI_TYPE_ID NUMBER := '';
V_FIRST_RECORD Boolean := false;

CURSOR brand_names_cur 
IS
Select BR.NAME AS BRAND_NAME INTO V_BRAND_NAME FROM RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION KD JOIN RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION_BRAND KDB ON KD.KPI_DEF_ID = KDB.KPI_DEF_ID JOIN
RATOR_MONITORING_CONFIGURATION.BRAND BR ON KDB.BRAND_ID = BR.BRAND_ID WHERE KD.KPI_DEF_ID = V_KPI_DEF_ID;

BEGIN
Select KPI_DEF_ID INTO V_KPI_DEF_ID FROM KPI_LOGS WHERE KPI_LOG_ID = IN_KPI_LOG_ID;

Select KT.KPI_TYPE_ID INTO V_KPI_TYPE_ID FROM RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION KD JOIN RATOR_MONITORING_CONFIGURATION.KPI_TYPE KT ON KD.KPI_TYPE = KT.KPI_TYPE_ID WHERE KD.KPI_DEF_ID = V_KPI_DEF_ID;

Select NAME INTO V_KPI_TYPE FROM RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION KD JOIN RATOR_MONITORING_CONFIGURATION.KPI_TYPE KT ON KD.KPI_TYPE = KT.KPI_TYPE_ID WHERE KD.KPI_DEF_ID = V_KPI_DEF_ID;

Select KPI_NAME INTO V_KPI_NAME FROM RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION WHERE KPI_DEF_ID = V_KPI_DEF_ID;

BODY := BODY || 'KPI_TYPE : ' || V_KPI_TYPE || Chr(13) || Chr(10);
BODY := BODY || 'KPI_NAME : ' || V_KPI_NAME || Chr(13) || Chr(10);

FOR brand_name IN brand_names_cur
LOOP
if v_first_record then
  body := 'BRAND_NAME : '|| brand_name.BRAND_NAME;
  v_first_record := true;
else
  body := body || ',' || brand_name.BRAND_NAME;
  v_first_record := false;
end if;
END LOOP;    

    RETURN BODY;
END BUILD_ALERT_EMAIL_BODY;

必须这样。

v_first_record := true;

FOR brand_name IN brand_names_cur
LOOP
if v_first_record then
  body := body || 'BRAND_NAME : '|| brand_name.BRAND_NAME;
  v_first_record := false;
else
  body := body || ',' || brand_name.BRAND_NAME;
end if;
END LOOP;  

编辑: 您在这里覆盖变量。所以添加附加到它...

body := body || 'BRAND_NAME : '|| brand_name.BRAND_NAME;