0

我有一张像这样的桌子:

create table police(
ssn
name
boss_name
salary
);

Insert into police values(1,’A’,’C’,10000);
Insert into police values(2,’B’,’D’,20000);
Insert into police values(3,’C’,’E’,30000);
Insert into police values(4,’D’,’E’,45000);
Insert into police values(5,’E’,NULL,55000);

我想要一个cursor返回total salarypolices who have same boss。这里的结果将是: 30000(salary of C)+45000(salary of D) 因为他们都在老板 E 之下。我是怎么做到的?我如何在 ORACLE pl/sql 或匿名块的 E 下找到 C 和 D?

4

2 回答 2

2

Gaurav Soni 和 APC 在他们的评论中给出了很好的建议。

一般经验法则 - 不要将游标用于可以通过直接 SQL 轻松解决的事情。直接 SQL 通常要快得多。

下面的 SQL 将列出每个老板,直接下属的总薪水,以及直接下属的数量。

select boss_name,
       sum(salary) total_salary,
       count(*) employee_count
  from police
 where boss_name is not null
 group by boss_name

如果您需要迭代老板的,您当然可以使用上面的查询来定义您的光标。但是您不应该使用游标来计算总数。让 SQL 完成这项工作。

于 2012-10-07T15:21:03.647 回答
-1

试试这个代码:

set serveroutput on;
declare
 cboss_name varchar2(30) ;
 csalary number ;  
 CURSOR cur
 is       
  select boss_name,sum(salary)  as salary
  from police 
  where boss_name is not null 
  group by boss_name;
begin
   open cur;
   fetch cur into cboss_name,csalary;
    dbms_output.put_line('boss_name'||' '||'csalary');
    LOOP
    FETCH cur INTO cboss_name,csalary;
       EXIT WHEN cur%NOTFOUND;
       dbms_output.put_line(cboss_name||'         '||csalary);
   END LOOP;

   close cur;  
end;

在这里您可以找到有关游标和循环的更多信息。

于 2012-10-07T13:11:13.967 回答