【问题标题】:PLSQL Getting expression is of wrong typePLSQL获取表达式的类型错误
【发布时间】:2020-09-24 06:58:26
【问题描述】:

我是 PLSQL 的新手,在创建 PLSQL 函数时遇到问题。它说表达式类型错误。我需要一些帮助。 这是我的功能

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

【问题讨论】:

    标签: oracle plsql user-defined-types


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您没有正确地将值分配给您的表类型。 l_tab(&lt;index&gt;) 必须分配HOTGROUPTYPE 类型的变量。

      你必须使用这个:

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

      【讨论】:

      • @Tejesh 非常感谢...它按预期工作
      猜你喜欢
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多