首页 > 解决方案 > 函数 Oracle PL SQL 批量收集错误 PLS-00382: 表达式类型错误

问题描述

我有这个功能:

CREATE OR REPLACE TYPE products_type AS OBJECT
(
   products VARCHAR2 (50),
   price VARCHAR2 (50)
);

CREATE OR REPLACE TYPE results_type AS TABLE OF products_type;


create or replace get_sum ( l_products in varchar2(50)
   RETURN results_type
IS
   l_result   results_type;
begin
 SELECT distinct products, count(price)
     BULK COLLECT INTO l_result
     FROM products;

   RETURN l_result;
END;
/

DECLARE
    l_result varchar2(50) := '0';
BEGIN
    l_result := get_sum ('apple')
    DBMS_OUTPUT.PUT_LINE('Price total ' || l_result);
END;

我有这张表,我想知道产品的总和是多少。当我想显示多列时,我尝试了解函数的工作原理。我在互联网上找到了与批量收集相关的内容并尝试这样做,但遇到此错误:

PLS-00382:表达式类型错误我做错了什么?

标签: sqloracleplsqloracle-sqldeveloperplsqldeveloper

解决方案


问题是在您的函数GET_SUM中,您返回的是 l_result 类型results_type。在您的匿名块中,您正在调用GET_SUM并尝试将其分配给VARCHAR2(50)变量。您尝试分配值的变量需要与函数的返回类型相匹配。


推荐阅读