2016-03-11 28 views
1

我想用兩個函數創建以下數據類型:Oracle錯誤:ORA-00900:無效的SQL語句

-- 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;後加入/,但它並不能幫助解決問題。

回答

2

只有FLOAT更換FLOAT(2)

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 datatype
For datatype, specify the data type of the return value of the function. The return value can have any data type supported by PL/SQL.
......
......
The data type cannot specify a length, precision, or scale. The database derives the length, precision, or scale of the return value from the environment from which the function is called.