首页 > 解决方案 > oracle函数不显示结果

问题描述

我对此很陌生,所以它可能听起来很基础,但是我想创建一个函数,它接受两个输入参数(一个主键和一个数值)并进行计算以比较输入数值(v_priceWantToInsert)是否大于表列中的最大值,并将结果返回为真或假。这是代码:

CREATE OR REPLACE FUNCTION PRICE_CHECK(v_productID IN VARCHAR2, v_priceWantToInsert in NUMBER)
RETURN VARCHAR2
IS
   RETURN BOOLEAN AS
    v_Bool BOOLEAN;
    v_MAXPRICE NUMBER;  
BEGIN
   SELECT
    MAX(B.BIDPRICE) INTO v_MAXPRICE
    FROM
        PRICEBID B
    WHERE B.PRODUCTID = v_productID;
    IF (v_MAXPRICE > v_priceWantToInsert) THEN
        v_Bool := FALSE;
    ELSE
        v_Bool := TRUE;
    END IF;
END PRICE_CHECK;



DECLARE
    var1 VARCHAR2(100);
BEGIN
     var1 := case when PRICE_CHECK('P00001',45) then 'true' else 'false' end;
    DBMS_OUTPUT.PUT_LINE('It is: ' || var1);
END; 

但是我的代码显示对象无效的错误,并且通常是 PL/SQL 编译错误。我愿意接受任何解决方案,只要它给我一个真值或假值。

标签: oraclestored-proceduresoracle11goracle-sqldeveloper

解决方案


我在代码中看到了一些时刻:

  1. DECLARE 部分中缺少字符串的长度。当变量是“字符串”类型时,Oracle 需要指定变量的长度,例如 VARCHAR 或 CHAR。限制为 32767:

     var1 VARCHAR2(100); -- might be up to 32767
    
  2. 在函数中,您使用的是未定义的变量 v_MAXPRICE。它必须在函数定义的 IS 和 BEGIN 部​​分之间完成。我认为它应该是这样的:

     IS
       v_MAXPRICE number;
     BEGIN
    
  3. 更新问题后,您的代码中还有另一个时刻

     RETURN VARCHAR2
     IS
        RETURN BOOLEAN AS
         v_Bool BOOLEAN;
         v_MAXPRICE NUMBER;  
    

有 2 个退货是错误的,将其替换为

       RETURN BOOLEAN
       IS
        v_Bool BOOLEAN;
        v_MAXPRICE NUMBER;  

因为它是一个函数并且必须返回一些你需要添加的东西

return v_bool

在“结束如果”之后

  1. 我想最后一部分是匿名块

首先,您的函数将布尔值返回到定义为 varchar2 的 var1 中。这是错误的,因为 Oracle 无法将布尔值转换为字符串,它需要帮助。

试试看:

    var1 := case when PRICE_CHECK('P00001',45) then 'true' else 'false' end;

推荐阅读