Search code examples
oracle-databaseplsqluser-defined-types

PLSQL Getting expression is of wrong type


I'm a newbee to PLSQL and I'm facing issues while created PLSQL function.It says expression is of wrong type.I need some help. Here is my function

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;
/

And I'm getting this error when the execute the function

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

Solution

  • You are not assigning the values to your table type properly. l_tab(<index>) must be assigned the variable of type HOTGROUPTYPE.

    You must use this:

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