繁体   English   中英

Oracle错误:ORA-00900:无效的SQL语句

[英]Oracle ERROR: ORA-00900: invalid SQL statement

我正在尝试使用2个函数创建以下数据类型:

-- 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;之后添加/ END; 但这无助于解决问题。

更换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相关的主题中找到说明: http : //docs.oracle.com/cd/B28359_01/appdev.111/b28370/create_function.htm RETURN数据类型

RETURN数据类型
对于数据类型,请指定函数返回值的数据类型。 返回值可以具有PL / SQL支持的任何数据类型。
......
......
数据类型不能指定长度,精度或小数位数。 数据库从调用函数的环境中得出返回值的长度,精度或小数位数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM