oracle - 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 编译错误。我愿意接受任何解决方案,只要它给我一个真值或假值。
解决方案
我在代码中看到了一些时刻:
DECLARE 部分中缺少字符串的长度。当变量是“字符串”类型时,Oracle 需要指定变量的长度,例如 VARCHAR 或 CHAR。限制为 32767:
var1 VARCHAR2(100); -- might be up to 32767
在函数中,您使用的是未定义的变量 v_MAXPRICE。它必须在函数定义的 IS 和 BEGIN 部分之间完成。我认为它应该是这样的:
IS v_MAXPRICE number; BEGIN
更新问题后,您的代码中还有另一个时刻
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
在“结束如果”之后
- 我想最后一部分是匿名块
首先,您的函数将布尔值返回到定义为 varchar2 的 var1 中。这是错误的,因为 Oracle 无法将布尔值转换为字符串,它需要帮助。
试试看:
var1 := case when PRICE_CHECK('P00001',45) then 'true' else 'false' end;
推荐阅读
- sql - Laravel:如何使用 Microsoft 凭据连接到 sql server
- bootstrap-4 - 白色和黑色棋子
- spring - 缺少工件 spring-webmvc:spring-webmvc:jar:4.0.6.RELEASE
- c++ - 具有不同模板参数的函数返回类型
- javascript - 谷歌脚本:如果其他数组通过行循环
- php - 图像压缩似乎会为 PNG 创建黑色图像
- java - RecyclerView 项影响 RecyclerView 外的 TextView 的值
- mysql - MariaDB - 我应该向我的表添加索引吗?
- ruby-on-rails - Rails has_many 通过 where 子句
- python - python beautifulsoup select,如何获取特定值