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);
Run Code Online (Sandbox Code Playgroud)
现在是一个返回完全相同类型的函数.
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;
Run Code Online (Sandbox Code Playgroud)
但是,(这已经花了我超过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;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息: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;
Run Code Online (Sandbox Code Playgroud)
目前你commit什么都不做......
您还没有提供如何创建全局类型,但如果您没有在包中执行此操作,则提供的语法不正确 ; 你确定它编译好了吗?
| 归档时间: |
|
| 查看次数: |
27715 次 |
| 最近记录: |