【问题标题】:Unable to call function with record type input parameter (PLS-00306/00382)无法使用记录类型输入参数调用函数 (PLS-00306/00382)
【发布时间】:2013-06-24 13:04:05
【问题描述】:

类型定义(在包中):

   TYPE t_konfiguracja_raport       IS RECORD(
   nazwa_tabeli varchar2(32),              
   nazwa_kolumny_etykieta varchar2(32),    
   nazwa_kolumny_wartosc varchar2(32),    
   etykieta varchar2(255),                  
   numer_wystapienia integer,               
   odi_sesja_id pg_odi_type.t_sesja,               
   offset integer                          
  );

函数声明——函数使用类型作为输入参数:

function pobierz_wartosc(konfiguracja in pg_odi_type.t_konfiguracja_raport) 
  return varchar2;

还有过程(与函数在同一个包中)。我需要在过程中使用函数,所以我试图这样做:

PROCEDURE zasilaj_posg_meldunek_dobowy(
      p_sesja               IN pg_odi_type.t_sesja, 
      o_status              OUT pg_odi_type.t_boolean) as

c_blok              constant    pg_odi_type.t_log_blok := 'pg_odi_raport.zasilaj_posg_meldunek_dobowy';
v_konfiguracja                  PZK_MAIN_V3.PG_ODI_TYPE.T_KONFIGURACJA_RAPORT;  

  begin


    pg_odi_log_err.save_log(c_blok,'BEGIN',pg_odi_const.C_LOG_CODE_DEBUG_01);
    o_status := pg_odi_const.C_BFALSE;

    v_konfiguracja.nazwa_tabeli := 'odi_posg_meldunek_dobowy';
    v_konfiguracja.nazwa_kolumny_etykieta := 'natezenie_ruchu';
    v_konfiguracja.nazwa_kolumny_wartosc :=  'ilosc_w_dniu';
    v_konfiguracja.etykieta := 'Wjechało do RP';
    v_konfiguracja.numer_wystapienia := 1;
    v_konfiguracja.odi_sesja_id := p_sesja;
    v_konfiguracja.offset := 0;

    select pg_odi_raport.pobierz_wartosc(v_konfiguracja) from dual; <--error!


    null;
  end zasilaj_posg_meldunek_dobowy;

不幸的是,它不起作用:

Error(90,12): PL/SQL: ORA-00904: "PG_ODI_RAPORT"."POBIERZ_WARTOSC": invalid identifier
Error(90,26): PLS-00306: wrong number or types of arguments in call to "POBIERZ_WARTOSC"
Error(90,42): PLS-00382: expression is of wrong type

我做错了什么?

【问题讨论】:

    标签: oracle function plsql custom-type


    【解决方案1】:

    添加声明:

    l_function_result varchar2(4000);
    

    更改自:

    pg_odi_raport.pobierz_wartosc(v_konfiguracja) from dual; <--error!
    

    到:

    l_function_result := pg_odi_raport.pobierz_wartosc(v_konfiguracja);
    

    ...应该没问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多