2014-12-06 112 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;