我正在创建一个功能,确保更新所有过时的员工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;
有什么想法吗?
答案 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;