我正在创建一个函数,以sys身份登录。Oracle函数编译错误,无错误
CREATE FUNCTION Core.Get_Contact_Code
(
First_Name IN NVARCHAR2,
Middle_Name IN NVARCHAR2,
Last_Name IN NVARCHAR2
)
RETURN NVARCHAR2
IS
Ret_Val NVARCHAR2(10);
C_Code NVARCHAR2(10);
CURSOR contact_cursor IS
SELECT Contact_Code FROM (
SELECT Contact_Code
FROM Core.Contacts
WHERE
Contact_Code LIKE UPPER(left(First_Name,2) ||
CASE
WHEN Middle_Name IS NULL THEN left(Last_Name,3)
ELSE left(Middle_Name,1) || left(Last_Name,2)
END || '%')
ORDER BY Contact_Code desc)
WHERE ROWNUM=1;
BEGIN
open contact_cursor;
fetch contact_cursor into C_Code;
close contact_cursor;
IF C_Code IS NULL THEN
Ret_Val :=
UPPER(left(First_Name,2)||
CASE
WHEN Middle_Name IS NULL THEN left(Last_Name,3)
ELSE left(Middle_Name,1) || left(Last_Name,2)
END
)
|| '-' || '0001';
ELSE
Ret_Val :=
UPPER(left(First_Name,2)||
CASE
WHEN Middle_Name IS NULL THEN left(Last_Name,3)
ELSE left(Middle_Name,1) || left(Last_Name,2)
END
)
|| '-' ||
trim(to_char(CAST(right(C_Code,4) AS integer)+1,'0000'));
END IF;
RETURN Ret_Val;
END;
/
show errors;
当我执行查询时,它说:
Warning: compiled but with compilation errors
No errors.
但是,当我忽略了核心架构的定义
CREATE FUNCTION Get_Contact_Code
它编译。
Oracle为何如此行事?
你为什么以sys身份登录? – Sathya
我正在通过脚本创建数据库,因此创建/更改/删除用户,因此这是开发环境。所以,我以sys身份工作。 –
有没有听说过存储过程的“定义者权利”?以SYS编译PL/SQL代码是一个坏主意。 – Codo