PLSQL 获取表达式类型错误

PLSQL Getting expression is of wrong type

我是 PLSQL 的新手,我在创建 PLSQL 时遇到问题 function.It 说表达式错误 type.I 需要一些帮助。 这是我的功能

CREATE OR REPLACE TYPE HOTGROUPTYPE AS OBJECT (
  IMEI           VARCHAR2(255),
  LACCI  VARCHAR2(255),
  FRAUD_TYPE VARCHAR2(255),
  MSISDN VARCHAR2(255)
);
/

CREATE OR REPLACE TYPE HOTGROUPTYPE_tab IS TABLE OF HOTGROUPTYPE;
/

CREATE OR REPLACE FUNCTION get_tab_tf (p_count IN NUMBER, p_days IN NUMBER) RETURN HOTGROUPTYPE_tab 
AS
l_tab  HOTGROUPTYPE_tab:=HOTGROUPTYPE_tab();
BEGIN
  for i in (select IMEI,LACCI,FRAUD_TYPE,MSISDN 
  from fms_fraud_master_tbl 
  where request_type='BARRING' 
  and rownum<2)
  loop
  l_tab.extend;
  l_tab(l_tab.last) := i.IMEI;
  end loop;

  RETURN l_tab;
END;
/

我在执行函数时遇到了这个错误

11/3     PL/SQL: Statement ignored
11/28    PLS-00382: expression is of wrong type

您没有正确地将值分配给您的 table 类型。 l_tab(<index>) 必须分配类型为 HOTGROUPTYPE 的变量。

你必须使用这个:

l_tab(l_tab.last) := HOTGROUPTYPE(i.IMEI, i.LACCI,i.FRAUD_TYPE,i.MSISDN );

从查询中填充集合的最简单方法是使用批量收集:

CREATE OR REPLACE FUNCTION get_tab_tf (p_count IN NUMBER, p_days IN NUMBER) RETURN HOTGROUPTYPE_tab 
AS
  l_tab  HOTGROUPTYPE_tab:=HOTGROUPTYPE_tab();
BEGIN

  select HOTGROUPTYPE( IMEI,LACCI,FRAUD_TYPE,MSISDN )
  bulk collect into l_tab
  from fms_fraud_master_tbl 
  where request_type='BARRING' ;

  RETURN l_tab;

END;
/