a3804997 2016-04-18 06:44 采纳率: 0%
浏览 1697

oracle我是哪里的类型不匹配?

以下是代码!
1 declare
2 type empcursor is ref cursor;
3 emp1 empcursor;
4 avgSal number;
5 deptno number;
6 empid number;
7 empSalary number;
8 begin
9 deptno:=&deptno;
10 if deptno=2 then
11 select avg(salary) into avgSal from emp where dept=2;
12 open emp1 for select id salary from emp where dept=2;
13 loop
14 fetch emp1 into empid,empSalary;
15 exit when emp1%notfound;
16 if empSalary>avgSal then
17 update emp set salary=salary-100 where id=empid;
18 elsif empSalary 19 update emp set salary=salary+100 where id=empid;
20 end if;
21 end loop;
22 if deptno=3 then
23 select avg(salary) into avgSal from emp where dept=3;
24 open emp1 for select id salary from emp where dept=3;
25 loop
26 fetch emp1 into empid,empSalary;
27 exit when emp1%notfound;
28 if empSalary>avgSal then
29 update emp set salary=salary-100 where id=empid;
30 elsif empSalary 31 update emp set salary=salary+100 where id=empid;
32 end if;
33 end loop;
34 end if;
35 end if;
36* end;
QL> /
输入 deptno 的值: 2
原值 9: deptno:=&deptno;
新值 9: deptno:=2;
eclare

第 1 行出现错误:
RA-06504: PL/SQL: 结果集变量或查询的返回类型不匹配
RA-06512: 在 line 14

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-05 10:41
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在您的Oracle程序中,您尝试将一个empcursor类型的对象与另一个number类型的对象进行比较。然而,empcursor类型的对象是游标(cursor),它用于执行SQL语句并返回结果集。

    因此,在您试图使用游标的fetch方法时,您尝试从游标中获取数据,这违反了游标的预期用途。游标主要用于执行SQL语句,而不是从其内部获取数据。因此,您需要确保您正确地调用游标的openfetch方法,并且确保这些操作发生在正确的上下文中。

    要解决这个问题,请检查以下几点:

    1. 确保您正在正确地创建游标emp1
    2. 检查游标是否成功打开并准备接受新的行。
    3. 确保您正确地设置了游标的fetch方法来处理新获取的数据。

    如果您能提供更具体的信息,例如代码片段或任何已知的问题,我可能能够为您提供更具体的帮助。

    评论

报告相同问题?