Oracle 在Pl/SQL函数中遇到以下符号之一:if
我正在编写下面的函数,在该函数中,我得到一个错误,我认为if/else条件为Error1360,5:PLS-00103:在预期以下情况之一时遇到符号BUILD\u ALERT\u EMAIL\u BODY:if。我认为我使用了正确的语法,但不知道为什么会出现错误Oracle 在Pl/SQL函数中遇到以下符号之一:if,oracle,function,if-statement,plsql,Oracle,Function,If Statement,Plsql,我正在编写下面的函数,在该函数中,我得到一个错误,我认为if/else条件为Error1360,5:PLS-00103:在预期以下情况之一时遇到符号BUILD\u ALERT\u EMAIL\u BODY:if。我认为我使用了正确的语法,但不知道为什么会出现错误 FUNCTION BUILD_ALERT_EMAIL_BODY ( IN_ALERT_LOGS_TIMESTAMP IN TIMESTAMP , IN_ALERT_LOGS_LOG_DESC IN VARCHAR2 , IN_KPI
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_TYPE_ID NUMBER;
V_KPI_THRESHOLD_MIN_VALE NUMBER;
V_KPI_THRESHOLD_MAX_VALE NUMBER;
V_EXPECTED_VALE NUMBER;
V_ACTUAL_VALE NUMBER;
BEGIN
-- ,'yyyy-MM-dd H24 mm ss'
Select KPI_DEF_ID INTO V_KPI_DEF_ID FROM KPI_LOGS WHERE KPI_LOG_ID = IN_KPI_LOG_ID;
Select EXPECTED_VALE INTO V_EXPECTED_VALE FROM KPI_LOGS WHERE KPI_LOG_ID = IN_KPI_LOG_ID;
Select ACTUAL_VALE INTO V_ACTUAL_VALE 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 KPI_THRESHOLD_MIN_VAL INTO V_KPI_THRESHOLD_MIN_VALE FROM RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION WHERE KPI_DEF_ID = V_KPI_DEF_ID;
Select KPI_THRESHOLD_MAX_VAL INTO V_KPI_THRESHOLD_MAX_VALE FROM RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION WHERE KPI_DEF_ID = V_KPI_DEF_ID;
IF ((V_KPI_TYPE_ID = 18) || (V_KPI_TYPE_ID = 19)) THEN
BODY := BODY || 'KPI_THRESHOLD_MIN_VAL:' || V_KPI_THRESHOLD_MIN_VALE || Chr(13) || Chr(10);
BODY := BODY || 'KPI_THRESHOLD_MAX_VAL:' || V_KPI_THRESHOLD_MAX_VALE || Chr(13) || Chr(10);
ELSE IF ((V_KPI_TYPE_ID = 11) || (V_KPI_TYPE_ID = 12) || (V_KPI_TYPE_ID = 13) || (V_KPI_TYPE_ID = 14) || (V_KPI_TYPE_ID = 20)) THEN
BODY := BODY || 'EXPECTED_VALE:' || V_EXPECTED_VALE || Chr(13) || Chr(10);
BODY := BODY || 'ACTUAL_VALE:' || V_ACTUAL_VALE || Chr(13) || Chr(10);
END IF;
RETURN BODY;
END BUILD_ALERT_EMAIL_BODY;
如有必要,再增加一个终端;在返回语句之前需要
只需检查ur if else结构,如果elsif else类似,它将是..语法正确
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_TYPE_ID NUMBER;
V_KPI_THRESHOLD_MIN_VALE NUMBER;
V_KPI_THRESHOLD_MAX_VALE NUMBER;
V_EXPECTED_VALE NUMBER;
V_ACTUAL_VALE NUMBER;
BEGIN
-- ,'yyyy-MM-dd H24 mm ss'
SELECT KPI_DEF_ID
INTO V_KPI_DEF_ID
FROM KPI_LOGS
WHERE KPI_LOG_ID = IN_KPI_LOG_ID;
SELECT EXPECTED_VALE
INTO V_EXPECTED_VALE
FROM KPI_LOGS
WHERE KPI_LOG_ID = IN_KPI_LOG_ID;
SELECT ACTUAL_VALE
INTO V_ACTUAL_VALE
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 KPI_THRESHOLD_MIN_VAL
INTO V_KPI_THRESHOLD_MIN_VALE
FROM RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION
WHERE KPI_DEF_ID = V_KPI_DEF_ID;
SELECT KPI_THRESHOLD_MAX_VAL
INTO V_KPI_THRESHOLD_MAX_VALE
FROM RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION
WHERE KPI_DEF_ID = V_KPI_DEF_ID;
IF ( (V_KPI_TYPE_ID = 18) || (V_KPI_TYPE_ID = 19))
THEN
BODY :=
BODY
|| 'KPI_THRESHOLD_MIN_VAL:'
|| V_KPI_THRESHOLD_MIN_VALE
|| CHR (13)
|| CHR (10);
BODY :=
BODY
|| 'KPI_THRESHOLD_MAX_VAL:'
|| V_KPI_THRESHOLD_MAX_VALE
|| CHR (13)
|| CHR (10);
ELSE
IF ( (V_KPI_TYPE_ID = 11)
|| (V_KPI_TYPE_ID = 12)
|| (V_KPI_TYPE_ID = 13)
|| (V_KPI_TYPE_ID = 14)
|| (V_KPI_TYPE_ID = 20))
THEN
BODY :=
BODY
|| 'EXPECTED_VALE:'
|| V_EXPECTED_VALE
|| CHR (13)
|| CHR (10);
BODY :=
BODY || 'ACTUAL_VALE:' || V_ACTUAL_VALE || CHR (13) || CHR (10);
END IF;
END IF; --<-- HERE
RETURN BODY;
END BUILD_ALERT_EMAIL_BODY;