我试图用两个函数创建以下数据类型:
-- Employee
CREATE OR REPLACE TYPE EmployeeType AS OBJECT (
EmployeeNumber NUMBER,
EmployeeName VARCHAR2(150),
EmployeeAddress VARCHAR2(255),
MAP MEMBER FUNCTION getEmployeeNumber RETURN NUMBER,
MEMBER FUNCTION CalculateSalary RETURN FLOAT(2)
)
NOT FINAL;
CREATE OR REPLACE TYPE BODY EmployeeType AS
MAP MEMBER FUNCTION getEmployeeNumber RETURN NUMBER IS
BEGIN
RETURN EmployeeNumber;
END;
-- function that can be overriden by subtypes, make abstract
MEMBER FUNCTION CalculateSalary RETURN FLOAT(2) IS
BEGIN
-- function returns empty, has to be overwritten by fulltimeemployee
RETURN 0.00;
END;
END; 然而,我总是收到一个错误声明
ERROR: ORA-00900: invalid SQL statement
Error Code: 900
Query = END我使用RazorSQL执行我的查询,我似乎无法得到导致此错误的行号,但通过反复尝试,我发现它是我的TYPE BODY定义中的函数描述之一。
我尝试过在上一个/之后添加END;,但这无助于解决这个问题。
发布于 2016-03-11 18:46:08
将FLOAT(2)替换为FLOAT
CREATE OR REPLACE TYPE EmployeeType AS OBJECT (
EmployeeNumber NUMBER,
EmployeeName VARCHAR2(150),
EmployeeAddress VARCHAR2(255),
MAP MEMBER FUNCTION getEmployeeNumber RETURN NUMBER,
MEMBER FUNCTION CalculateSalary RETURN FLOAT
)
NOT FINAL;
/
CREATE OR REPLACE TYPE BODY EmployeeType AS
MAP MEMBER FUNCTION getEmployeeNumber RETURN NUMBER IS
BEGIN
RETURN EmployeeNumber;
END;
-- function that can be overriden by subtypes, make abstract
MEMBER FUNCTION CalculateSalary RETURN FLOAT IS
BEGIN
-- function returns empty, has to be overwritten by fulltimeemployee
RETURN 0.00;
END;
END;
/CREATE TYPE的文档没有提到这一点,但是您可以在与CREATE FUNCTION:function.htm返回数据类型相关的主题中找到解释
返回数据类型 对于数据类型,指定函数返回值的数据类型。返回值可以具有PL/SQL支持的任何数据类型。 . . 数据类型不能指定长度、精度或比例尺。数据库从调用函数的环境中派生返回值的长度、精度或比例。
https://stackoverflow.com/questions/35946606
复制相似问题