我有以下习惯RECORD TYPE:
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变量的那一行上)
我的意思是,该函数返回的aRECORD与我声明的变量的类型完全相同!我在这里想念什么???
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无所事事…
commit
您尚未提供创建全局类型的方式,但是如果没有在包中进行创建,则提供的语法不正确;您确定它已编译吗?