gpt4 book ai didi

oracle - 在 FETCH 游标和 INTO 变量之间的 'EMPTYPE' 处发现类型不匹配

转载 作者:行者123 更新时间:2023-12-04 00:33:12 28 4
gpt4 key购买 nike

create or replace type emp_obj as object(empno varchar2(500));

create or replace type emp_table as table of emp_obj ;

程序

create or replace procedure getempid(emptype out emp_table)
is
cursor c1 is select empno from emp ;
begin
open c1;
fetch c1 bulk collect into emptype;

close c1;
end;

我无法理解为什么会出现以下错误:

Error(6,17): PLS-00386: type mismatch found at 'EMPTYPE' between FETCH cursor and INTO variables

最佳答案

您的游标查询正在选择一个标量值 empno 但试图将其批量提取到对象表中。您期望 Oracle 弄清楚如何将标量值转换为对象。

对于单属性对象可能看起来并不完全不合理,但想想多属性对象的复杂性,或者如果您希望光标选择对象和标量值的混合。 (顺便说一句,您的 empno 真的是 500 个字符的字符串,而不是数字吗?)

您可以修改游标查询以显式构造一个对象:

select emp_obj(empno) from emp

所以这个版本编译:

create or replace procedure getempid (emptype out emp_table)
is
cursor c1 is select emp_obj(empno) from emp;
begin
open c1;
fetch c1 bulk collect into emptype;
close c1;
end;
/

关于oracle - 在 FETCH 游标和 INTO 变量之间的 'EMPTYPE' 处发现类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47730246/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com