2014-12-06 115 views
-2

我想知道您是否可以提供幫助。帶一個參數的PL/SQL函數

我在我的智慧結束與此。

我想創建一個函數,將採取一個參數。

這是我的代碼。運行時我總是收到錯誤:

錯誤(3,19):PLS-00103:遇到符號「;」預計以下幾部件之一時:
開始函數編譯程序亞型類型當前光標刪除在之前存在外部語言

代碼

set serveroutput on; 

CREATE OR REPLACE FUNCTION CheckBookType (
    p_book_type TITLES.CATEGORY 
) RETURN BOOLAN IS; 

BEGIN 

    IF (p_book_type = 'business') THEN 


    return true; 

    ELSE 

    return false; 

    END IF; 

    RETURN v_ReturnValue; 
END CheckBookType; 
+0

你必須與你的代碼的多個問題。 – 2014-12-06 07:36:31

回答

0

讓我們來看看由線問題行代碼:

設置serveroutput;

  1. 它不會做任何傷害,但我看不出它如何幫助或上下文是必需的。

  2. p_book_type TITLES.CATEGORY是錯誤的,因爲您需要指定它是使用%TYPE attributeconstrained數據類型。正確的方法是

p_book_type TITLES.CATEGORY%TYPE

  • 由他人上面已經提到的,返回值的數據類型應該是BOOLEAN。你不必在「IS」之後加分號。

  • 返回布爾值的variable未被聲明。

  • v_ReturnValue BOOLEAN;

  • 記住,使用BOOLEAN數據類型作爲返回不會讓你在SQL使用function。因爲,布爾值不是SQL數據類型。布爾值是PL/SQL數據類型。您只能在PL/SQL中使用該函數,而在SQL中不能。
  • 你的函數看起來像:

    相當冗長。

    CREATE OR replace FUNCTION Checkbooktype (p_book_type titles.category%TYPE) 
    RETURN BOOLEAN 
    IS 
        v_returnvalue BOOLEAN; 
    BEGIN 
        IF (p_book_type = 'business') THEN 
         v_returnvalue:= TRUE; 
        ELSE 
         v_returnvalue:= FALSE; 
        END IF; 
    
        RETURN v_returnvalue; 
    END checkbooktype; 
    
    /
    

    ,或在不和ELSE,以回報默認爲FALSE

    不詳細。

    CREATE OR replace FUNCTION Checkbooktype (p_book_type titles.category%TYPE) 
    RETURN BOOLEAN 
    IS 
        v_returnvalue BOOLEAN; 
    BEGIN 
    
        v_returnvalue:= FALSE; 
    
        IF (p_book_type = 'business') THEN 
         v_returnvalue:= TRUE; 
        END IF; 
    
        RETURN v_returnvalue; 
    END checkbooktype; 
    
    /
    

    @ APC的解決方案是最不詳細的。

    +1

    即使你的回答不正確。 IF/ELSE分支執行RETURN調用,因此最終調用永遠不會執行。因此變量聲明是不相關的。 – APC 2014-12-06 08:17:33

    +0

    @APC,正確。我只是複製粘貼IF-ELSE塊。事實上,條件構造根本不需要。我看到你已經發布了它,所以我會以其他方式編輯我的答案。 – 2014-12-06 08:46:53

    1

    最詳細的解決方案:

    CREATE OR REPLACE FUNCTION CheckBookType (
         p_book_type IN TITLES.CATEGORY%type 
        ) RETURN BOOLEAN 
    IS 
    BEGIN 
    
        return p_book_type = 'business'; 
    
    END CheckBookType;