【问题标题】:Cursor for loop to return output in proper format in oracle stored procedure用于循环的光标以在 oracle 存储过程中以正确的格式返回输出
【发布时间】:2015-12-10 09:59:18
【问题描述】:

我有以下过程,我想返回变量值brand_name.BRAND_NAME 的输出。我得到了正确的输出。但我想以正确的格式返回它。例如,现在我得到的输出为

BRAND_NAMES:FNC
BRAND_NAMES:LIDL

但我想将输出返回为:

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_BRAND_NAME VARCHAR2(100) := '';
V_KPI_TYPE_ID NUMBER := '';

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;

    FOR brand_name IN brand_names_cur
    LOOP
    BODY := BODY || 'BRAND_NAME:' || brand_name.BRAND_NAME || Chr(10) || Chr(13);
    END LOOP;   

BODY := BODY || 'ALERT_DESCRIPTION:' || to_char(IN_ALERT_LOGS_LOG_DESC);

    RETURN BODY;
END BUILD_ALERT_EMAIL_BODY;

【问题讨论】:

  • 积累你的列表没有“标题”和:chr(10),chr(13),然后在最后添加“BRAND_NAME:”和CR/LF?祝你好运。
  • 我不懂shellter ...你能把它放到答案部分吗?
  • 对不起,我今天要走了。考虑几分钟,你就会明白的。很容易。
  • 如果你的brand_names列表不是太长,可以使用listagg函数获取逗号分隔值,然后拼接到'BRAND_NAME: '

标签: sql oracle for-loop stored-procedures cursor


【解决方案1】:

添加 V_FIRST_RECORD 变量

V_FIRST_RECORD Boolean := true;

并像这样在循环中使用它

if v_first_record then
  body := 'BRAND_NAME: '||brane_name.BRAND_NAME;
else
  body := body ||','||brane_name.BRAND_NAME;
  v_first_record := false;
end if;

【讨论】:

  • 我得到的结果是,FNC,LIDL,没有标题
  • 我认为你必须将布尔变量初始化为真
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多