Oracle 在Pl/SQL函数中遇到以下符号之一: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

我正在编写下面的函数,在该函数中,我得到一个错误,我认为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_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;