Fel*_*ida 0 sql oracle plsql oracle11g
我有以下自定义RECORD TYPE:
TYPE TB48_RECTYPE IS RECORD ( 
                             codpo varchar2(5 BYTE),
                             codco varchar2(5 BYTE),
                             quadr varchar2(5 BYTE),
                             espec varchar2(5 BYTE),
                             aperf varchar2(5 BYTE),
                             subes varchar2(5 BYTE),
                             datin date);
现在是一个返回完全相同类型的函数.
function retorna_infos_tabela_48(i_nip in varchar2) return TB48_RECTYPE is
retorno_REC TB48_RECTYPE;
begin
    select m.CODPO,
           m.CODCO,
           m.QUADR,
           m.ESPEC,
           m.APERF,
           m.SUBES,
           m.DATIN 
    into retorno_REC
    from TB48_M m
    where m.NRO = i_nip;
    return retorno_REC;
end retorna_infos_tabela_48; 
但是,(这已经花了我超过4个小时),当我尝试像这样运行它:
    DECLARE 
    TYPE TB48_RECTYPE IS RECORD (
                             codpo varchar2(5 BYTE),
                             codco varchar2(5 BYTE),
                             quadr varchar2(5 BYTE),
                             espec varchar2(5 BYTE),
                             aperf varchar2(5 BYTE),
                             subes varchar2(5 BYTE),
                             datin date);
  RetVal TB48_RECTYPE;
  I_NIP VARCHAR2(200);
  BEGIN 
    I_NIP := '88888888';
    RetVal := RETORNA_INFOS_TABELA_48 ( I_NIP );
    COMMIT; 
  END;
我收到以下错误消息:PLS-00382:表达式类型错误.(在我将函数返回值赋给RetVal变量的行上)
我的意思是,函数返回一个RECORD与我声明的变量完全相同的类型!! 我在这里失踪了什么?
提前谢谢(以及几个REP点).
我怀疑你的问题是你试图将全局声明的类型放入本地声明的类型.
我想如果你把你的程序改为以下它应该有效.
declare
  RetVal TB48_RECTYPE;
  i_nip varchar2(200);
begin
   i_nip := '86583557';
   RetVal := USERTEMPOS.PKG_ESTRANG_NOVA.RETORNA_INFOS_TABELA_48 ( I_NIP );
   commit;
end;
目前你commit什么都不做......
您还没有提供如何创建全局类型,但如果您没有在包中执行此操作,则提供的语法不正确 ; 你确定它编译好了吗?