2016-12-15 98 views
1

您好,我正在嘗試執行以下問題並不斷收到錯誤。創建一個名爲DOLLARS_BY_VEHICLE_TYPE的用戶定義函數,該函數接收串聯品牌和型號的輸入參數,然後查詢VEHICLES和SALES_FACTS表以返回該組合的銷售總銷售總額。我的代碼如下:ORA-06575:處於無效狀態

CREATE OR REPLACE FUNCTION DOLLARS_BY_VEHICLE_TYPE (V_AUTODESC VARCHAR2) 
RETURN VARCHAR2 
IS 
V_AMT VARCHAR2 (50); 
BEGIN 
SELECT NVL (SUM (GROSS_SALES_AMOUNT), 0) 
INTO V_AMT 
FROM VEHICLES v, SALES_FACTS s 
WHERE V.Vehicle_Code = S.Vehicle_Code AND V.DESCRIPTION= V_AUTODESC; 

RETURN V_AMT; 
EXCEPTION 
WHEN OTHERS 
THEN 
RETURN 0; 
END; 
/

然而,當我運行它,我得到:

警告:與編譯錯誤創建功能。 ERROR位於第1行: ORA-06575:包裝或功能DOLLARS_BY_VEHICLE_TYPE處於無效狀態

+0

[甲骨文10G:ORA-06575:功能處於無效狀態]的可能的複製(http://stackoverflow.com/questions/5210379/oracle-10g-ora-06575-function-in-無效狀態) –

+0

^這個重複顯示完整的故障排除 –

回答

2

請看到你試圖返回從功能sum並且只能number/int/float。所以你函數的返回類型應該是number而不是varchar2。另請注意,您正在使用可以更改的不推薦使用的sql語法。見下文:

CREATE OR REPLACE FUNCTION DOLLARS_BY_VEHICLE_TYPE (V_AUTODESC VARCHAR2) 
    -- RETURN VARCHAR2 
    RETURN NUMBER 
IS 
    --V_AMT VARCHAR2 (50); 
    V_AMT NUMBER; 
BEGIN 
    SELECT NVL (SUM (GROSS_SALES_AMOUNT), 0) 
    INTO V_AMT 
    FROM VEHICLES v 
    inner join SALES_FACTS s 
    ON V.Vehicle_Code = S.Vehicle_Code 
    where V.DESCRIPTION = V_AUTODESC; 

    RETURN V_AMT; 
EXCEPTION 
    WHEN OTHERS 
    THEN 
     RETURN 0; 
END; 
/