2011-12-14 23 views
0

我是新手,在PL/SQLPL/SQL游标来计算的项目

我必须完成的过程,计算选择员工ID的平均通过解析程序PARAMET和计算的项目数量该员工已采取数

这里是我的表:

CREATE TABLE employee(
empid number(5), 
empname varchar(20), 
address varchar(20), 
no_of_dependents number(5), 
deptno number(5), 
CONSTRAINT EMPLOYEE_PKEY PRIMARY KEY(empid), 
CONSTRAINT EMPLOYEE_FKEY FOREIGN KEY(deptno) REFERENCES department(deptno)); 

CREATE TABLE project(
projectno number(5), 
location varchar(20), 
incharge number(5), 
rate_per_hour number(5), 
CONSTRAINT PROJECT_PKEY PRIMARY KEY(projectno), 
CONSTRAINT PROJECT_FKEY FOREIGN KEY(incharge) REFERENCES employee(empid)); 

CREATE TABLE assignment(
empid number(5), 
projectid number(5), 
hours number(5), 
CONSTRAINT ASSIGNMENT_FKEY FOREIGN KEY(empid) REFERENCES employee(empid), 
CONSTRAINT ASSIGNEMNT_FKEY2 FOREIGN KEY(projectid) REFERENCES project(projectno)); 

这里基本上是PL/SQL过程

set serveroutput on 

create or replace procedure disp(idd number) is 

    cursor c1 is select avg(ass.hours) from assignment ass join employee e on 
    e.empid=ass.empid 
    where ass.empid=idd; 

    cursor c2 is select empname from employee where empid=idd; 
    v_name varchar(20); 

    cursor c3 is select count(p.projectno) 
    from employee e join project p on 
    e.empid=p.incharge 
    where p.incharge=idd; 
    v_count_nr number; 




begin 
    open c1; 
    fetch c1 into v_avg_nr; 
    close c1; 
    open c2; 
    fetch c2 into v_name; 
    close c2; 
    open c3; 
    fetch c3 into v_count_nr; 
    close c3; 

    dbms_output.put_line('Employee: '||idd); 
    dbms_output.put_line('Employee Name: '||v_name); 
    dbms_output.put_line('Number of projects: '||v_count_nr); 
    dbms_output.put_line('Average Working Hours: '||v_avg_nr); 



    end disp; 
/

    execute disp(101); 

我期待的问题,其中C3具有计数项目员工的数量了

据统计错误 这里是输出什么,我得到:

Employee: 101 
Employee Name: Marlen 
Number of projects: 20 
Average Working Hours: 107.4 

感谢您的帮助!我该如何检查平均工作时间是否小于10,那么员工的工资保持不变,否则检查项目数量是否小于4,然后是工资的5%,否则工资的10%加到工资中

回答

0

尝试删除c3游标中的group by子句。此外,c1是所有员工的平均工作时间:这是您所期望的吗?

为什么选择sproc?您可以使用标准聚合函数在常规查询中实现您的目标。

+0

非常感谢!我修改了c3光标c3是来自员工e加入项目p的select count(p.projectno) e.empid = p.incharge 其中p.incharge = idd; v_count_nr编号; – mydreamadsl 2011-12-14 17:22:33