oracle函数不显示结果
Posted
技术标签:
【中文标题】oracle函数不显示结果【英文标题】:oracle function not displaying results 【发布时间】:2021-06-16 13:03:36 【问题描述】:我对此很陌生,所以它可能听起来很基础,但是我想创建一个函数,它接受两个输入参数(一个主键和一个数值)并进行计算以比较输入数值 (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 编译错误。我愿意接受任何解决方案,只要它给我一个真或假值。
【问题讨论】:
【参考方案1】:我在代码中看到了一些时刻:
在 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是错误的,替换为
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;
【讨论】:
更改了这个,但出现错误:PLS-00905: object user.PRICE_CHECK is invalid. 你使用什么开发工具?只是sqlplus吗? 我使用 sqldeveloper,我必须说获得错误并不是很友好,但那是我的学校项目,我无法更改它。我已经用我现在正在尝试的内容更新了上面的代码。 @pun_intended 请检查更新的答案 嘿,还是一样。这些是错误: 06550. 00000 - "line %s, column %s:\n%s" *原因:通常是 PL/SQL 编译错误。 *行动:以上是关于oracle函数不显示结果的主要内容,如果未能解决你的问题,请参考以下文章