PL / SQL嵌套if语句

时间:2016-04-13 16:39:42

标签: oracle if-statement plsql nested

我正在创建一个功能,确保更新所有过时的员工ID,总共有4个号码。例如,如果员工的id为11,则它将与两个0的连接:0011。 我一直收到错误:

Error(19,4): PLS-00103: Encountered the symbol ";" when 
        expecting one of the following: if 

它会在第一个嵌套if:

处标记
create or replace function ID_RENEWAL(OLD_ID IN VARCHAR2)
return VARCHAR2
is UPDATED_ID VARCHAR2(4);
begin
if (length(OLD_ID) < 4) THEN
   UPDATED_ID := '0'||OLD_ID;
    if (length(OLD_ID) < 4) THEN
     UPDATED_ID := '0'||OLD_ID;
      if (length(OLD_ID) = 4) THEN
        return (UPDATED_ID);
      end if;
   end if;
else
  UPDATED_ID := SUBSTR(OLD_ID, 1, 4);
return (UPDATED_ID);
end;

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您必须使用IF结束每个END IF语句。以下是正确的:

IF (length(OLD_ID) < 4) THEN
  UPDATED_ID := '0'||OLD_ID;

  IF (length(OLD_ID) < 4) THEN
    UPDATED_ID := '0'||OLD_ID;

    IF (length(OLD_ID) = 4) THEN
      return (UPDATED_ID);
    END IF;
  END IF;
ELSE
  UPDATED_ID := SUBSTR(OLD_ID, 1, 4);
END IF;

具体的错误消息源于您未在END IF;之后放置ELSE这一事实,这就是为什么函数终止END;被解析为不完整{{1} }}

答案 1 :(得分:0)

这是一种更简化的形式:

create or replace function ID_RENEWAL(OLD_ID IN VARCHAR2)
return VARCHAR2
is 
UPDATED_ID VARCHAR2(4);
begin
    SELECT LPAD(SUBSTR(OLD_ID,1,4),4,'0') INTO UPDATED_ID FROM DUAL;
return (UPDATED_ID);
end;