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;
我写了下面的程序,我想在其中 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;