PLS-00103:遇到符号“;如果;在oracle函数中预期出现以下情况之一时
我正在编写下面的函数,在该函数中,我得到的错误为PLS-00103:遇到符号“;如果;在oracle函数中预期出现以下情况之一时,oracle,function,if-statement,plsql,Oracle,Function,If Statement,Plsql,我正在编写下面的函数,在该函数中,我得到的错误为PLS-00103:在预期以下情况之一时遇到符号“IF”:(+case mod new null。我知道这个错误出现在我试图用THRESHOLD\u MIN\u ALERT字符串附加if条件的那一行。我想用if条件和值附加字符串Minimum THRESHOLD。例如,对于Minimum THRESHOLD,它应该是这样的ifV\u THRESHOLD_最小警报=Y然后 THRESHOLD_MIN_ALERT(Alert Configured) 1
PLS-00103:在预期以下情况之一时遇到符号“IF”:(+case mod new null
。我知道这个错误出现在我试图用THRESHOLD\u MIN\u ALERT
字符串附加if条件的那一行。我想用if条件和值附加字符串Minimum THRESHOLD
。例如,对于Minimum THRESHOLD
,它应该是这样的ifV\u THRESHOLD_最小警报=Y
然后
THRESHOLD_MIN_ALERT(Alert Configured) 100
THRESHOLD_MIN_ALERT 100
如果V\u阈值\u MIN\u警报=N
,则
THRESHOLD_MIN_ALERT(Alert Configured) 100
THRESHOLD_MIN_ALERT 100
如果我删除If条件,则我的函数运行良好。我不知道如何附加If编码的语法。以下是我的函数:
FUNCTION BUILD_ALERT_EMAIL_BODY
(
IN_ALERT_LOGS_TIMESTAMP IN TIMESTAMP
) RETURN VARCHAR2 AS
BODY VARCHAR2(4000) := '';
V_KPI_DEF_ID NUMBER := '';
V_KPI_TYPE_ID NUMBER := '';
V_KPI_THRESHOLD_MIN_VALE NUMBER := '';
V_KPI_THRESHOLD_MAX_VALE NUMBER := '';
V_THRESHOLD_MIN_ALERT NUMBER;
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 KPI_DEFINITION KD JOIN KPI_TYPE KT ON KD.KPI_TYPE = KT.KPI_TYPE_ID WHERE KD.KPI_DEF_ID = V_KPI_DEF_ID;
Select THRESHOLD_MAX_VAL INTO V_KPI_THRESHOLD_MAX_VALE FROM KPI_DEFINITION WHERE KPI_DEF_ID = V_KPI_DEF_ID;
Select THRESHOLD_MIN_VAL INTO V_KPI_THRESHOLD_MIN_VALE FROM KPI_DEFINITION WHERE KPI_DEF_ID = V_KPI_DEF_ID;
Select THRESHOLD_MIN_ALERT INTO V_THRESHOLD_MIN_ALERT FROM KPI_DEFINITION WHERE KPI_DEF_ID = V_KPI_DEF_ID;
Select THRESHOLD_Max_ALERT INTO V_THRESHOLD_MAX_ALERT FROM KPI_DEFINITION WHERE KPI_DEF_ID = V_KPI_DEF_ID;
BODY := 'ALERT TIMESTAMP : ' || to_char(IN_ALERT_LOGS_TIMESTAMP,'DD.MM.YYYY HH24:MI') || Chr(13) || Chr(10);
IF ((V_KPI_TYPE_ID = 18) OR (V_KPI_TYPE_ID = 19)) THEN
BODY := BODY || 'Minimum Threshold' || if (V_THRESHOLD_MIN_ALERT = Y) then '(Alert Configured)' END IF; || V_KPI_THRESHOLD_MIN_VALE || Chr(13);
END IF;
RETURN BODY;
END BUILD_ALERT_EMAIL_BODY;
以下IF-END IF块中存在问题:
IF (V_THRESHOLD_MIN_ALERT = Y)
THEN
'(Alert Configured)'
END IF;
|| V_KPI_THRESHOLD_MIN_VALE || Chr(13);
END IF;
IF (V_THRESHOLD_MIN_ALERT = 'Y')
THEN
BODY := BODY||'(Alert Configured)';
ELSE
BODY := BODY|| V_KPI_THRESHOLD_MIN_VALE || Chr(13);
END IF;
BODY := BODY || 'Minimum Threshold' ||
CASE
WHEN V_THRESHOLD_MIN_ALERT = 'Y' THEN
'Alert Configured'
END || V_KPI_THRESHOLD_MIN_VALE || Chr(13);
v_body VARCHAR2(4000) := '';
或者,您可以使用大小写表达式:
比如说,
IF (V_THRESHOLD_MIN_ALERT = 'Y')
THEN
BODY := BODY||'(Alert Configured)';
ELSE
BODY := BODY|| V_KPI_THRESHOLD_MIN_VALE || Chr(13);
END IF;
BODY := BODY || 'Minimum Threshold' ||
CASE
WHEN V_THRESHOLD_MIN_ALERT = 'Y' THEN
'Alert Configured'
END || V_KPI_THRESHOLD_MIN_VALE || Chr(13);
v_body VARCHAR2(4000) := '';
而且
BODY是一个名称。最好使用不同的名称
比如说,
IF (V_THRESHOLD_MIN_ALERT = 'Y')
THEN
BODY := BODY||'(Alert Configured)';
ELSE
BODY := BODY|| V_KPI_THRESHOLD_MIN_VALE || Chr(13);
END IF;
BODY := BODY || 'Minimum Threshold' ||
CASE
WHEN V_THRESHOLD_MIN_ALERT = 'Y' THEN
'Alert Configured'
END || V_KPI_THRESHOLD_MIN_VALE || Chr(13);
v_body VARCHAR2(4000) := '';
以下IF-END IF块中存在问题:
IF (V_THRESHOLD_MIN_ALERT = Y)
THEN
'(Alert Configured)'
END IF;
|| V_KPI_THRESHOLD_MIN_VALE || Chr(13);
END IF;
IF (V_THRESHOLD_MIN_ALERT = 'Y')
THEN
BODY := BODY||'(Alert Configured)';
ELSE
BODY := BODY|| V_KPI_THRESHOLD_MIN_VALE || Chr(13);
END IF;
BODY := BODY || 'Minimum Threshold' ||
CASE
WHEN V_THRESHOLD_MIN_ALERT = 'Y' THEN
'Alert Configured'
END || V_KPI_THRESHOLD_MIN_VALE || Chr(13);
v_body VARCHAR2(4000) := '';
或者,您可以使用大小写表达式:
比如说,
IF (V_THRESHOLD_MIN_ALERT = 'Y')
THEN
BODY := BODY||'(Alert Configured)';
ELSE
BODY := BODY|| V_KPI_THRESHOLD_MIN_VALE || Chr(13);
END IF;
BODY := BODY || 'Minimum Threshold' ||
CASE
WHEN V_THRESHOLD_MIN_ALERT = 'Y' THEN
'Alert Configured'
END || V_KPI_THRESHOLD_MIN_VALE || Chr(13);
v_body VARCHAR2(4000) := '';
而且
BODY是一个名称。最好使用不同的名称
比如说,
IF (V_THRESHOLD_MIN_ALERT = 'Y')
THEN
BODY := BODY||'(Alert Configured)';
ELSE
BODY := BODY|| V_KPI_THRESHOLD_MIN_VALE || Chr(13);
END IF;
BODY := BODY || 'Minimum Threshold' ||
CASE
WHEN V_THRESHOLD_MIN_ALERT = 'Y' THEN
'Alert Configured'
END || V_KPI_THRESHOLD_MIN_VALE || Chr(13);
v_body VARCHAR2(4000) := '';
编辑:也将
BODY
更改为上面建议的其他变量
更改IF-ELSE逻辑,如下所示
IF ((V_KPI_TYPE_ID = 18) OR (V_KPI_TYPE_ID = 19)) THEN
IF V_THRESHOLD_MIN_ALERT = Y then
BODY := BODY || 'Minimum Threshold' || '(Alert Configured)' || V_KPI_THRESHOLD_MIN_VALE || Chr(13);
else
BODY := BODY || 'Minimum Threshold' || V_KPI_THRESHOLD_MIN_VALE || Chr(13);
end if;
end if;
编辑:也将
BODY
更改为上面建议的其他变量
更改IF-ELSE逻辑,如下所示
IF ((V_KPI_TYPE_ID = 18) OR (V_KPI_TYPE_ID = 19)) THEN
IF V_THRESHOLD_MIN_ALERT = Y then
BODY := BODY || 'Minimum Threshold' || '(Alert Configured)' || V_KPI_THRESHOLD_MIN_VALE || Chr(13);
else
BODY := BODY || 'Minimum Threshold' || V_KPI_THRESHOLD_MIN_VALE || Chr(13);
end if;
end if;
当我使用decode时,我得到的错误是错误(1405,45):PLS-00204:函数或伪列“decode”可以在SQL语句中使用only@Rahul抱歉
DECODE
仅适用于SQL,不适用于PL/SQL。请使用CASE
或IF-ELSE
。使用DECODE时,请参阅UDPATE我将错误作为错误获取(1405,45):PLS-00204:函数或伪列“DECODE”可在SQL语句中使用only@Rahul抱歉DECODE
仅适用于SQL,不适用于PL/SQL。请使用CASE
或IF-ELSE
。请参阅udpate