Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PLS-00103:遇到符号“;如果;在oracle函数中预期出现以下情况之一时_Oracle_Function_If Statement_Plsql - Fatal编程技术网

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
,它应该是这样的if
V\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;
  • 您需要将值分配给变量
  • “Y”是一个字符串,不是布尔值。必须将其括在单引号内
  • 比如说,

    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;
    
  • 您需要将值分配给变量
  • “Y”是一个字符串,不是布尔值。必须将其括在单引号内
  • 比如说,

    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