在对象关系数据库中使用方法时如何编写SQL语句



我正在尝试使用 oracle 11g 中的方法创建一个小型银行员工数据库,因此最后我可以获取那些有权在年底获得奖项的员工的值:

在银行工作12年以上并监督6名以上员工的员工获得金牌;在银行工作

8年以上并监督3名以上员工的员工获得银牌;在银行工作的员工获得铜牌超过4年,显示他们的名字和授予的奖章(仅显示已获奖者(。

所以我在这里做什么

create type EmployeeName as object(
title varchar2(10),
firstName varchar2(20),
surname varchar2(20))
not final
/
create or replace type employeeaward as object(
empID integer,
eName EmployeeName,
number_staff_supervised int,
working_years int,
MEMBER FUNCTION award_given RETURN STRING,
MEMBER FUNCTION number_fraction (N real) RETURN real
);
/
CREATE OR REPLACE TYPE BODY employeeaward AS
MEMBER FUNCTION award_given RETURN STRING IS
BEGIN
IF self.working_years > 12 THEN
RETURN 'gold medal';
ELSIF self.working_years > 8 THEN
RETURN 'silver medal';
ELSIF self.working_years > 4 THEN
RETURN 'bronze medals';
END IF;
END award_given;
MEMBER FUNCTION number_fraction(N real) RETURN real IS
num real;
BEGIN
num :=(self.number_staff_supervised);
return num;
END number_fraction;
END;
然后创建一个表员工奖励表的员工

奖励表,如下所示:

create table employeeawardtable of employeeaward;
/

然后在表中插入一些值

insert into employeeawardtable values('2001',EmployeeName('Mr','Rohit','Sharma'),'12','18');
/
insert into employeeawardtable values('2002',EmployeeName('Mr','Andrew','Darson'),'9','7');
/
insert into employeeawardtable values('2003',EmployeeName('Mrs','Sarah','Barlow'),'5','4');
/
insert into employeeawardtable values('2004',EmployeeName('Mr','Ram','Gopal'),'11','9');
/

**这是SQL查询,我正在努力获取数据。

select e.ename.firstname, e.award_given(),e.number_fraction(15)
from employeeawardtable e
where e.number_fraction() > 8; 

谢谢。

以下是代码的问题。

  1. 调用 number_fraction 成员函数时,谓词中没有参数。这将引发错误,"ORA-06553: PLS-306: wrong number or types of arguments in call to 'NUMBER_FRACTION'"

以下是满足您要求的 SQL。

select e.ename.firstname, e.award_given()
from employeeawardtable e
where e.award_given() = 'gold medal' and e.number_staff_supervised > 6
or e.award_given() = 'silver medal' and e.number_staff_supervised > 3
or e.award_given() = 'bronze medal';
  1. member_function award_given未返回默认值。这将引发错误。 "ORA-06503: PL/SQL: Function returned without value" .修复类型主体,如下所示。

    创建或替换类型主体员工奖励为返回字符串award_given成员函数为开始如果self.working_years> 12,则返回"金牌";ELSIF self.working_years> 8 然后返回"银牌";ELSIF self.working_years> 4 然后归还"铜牌";其他--新增返回"无奖牌";--新添加如果结束;结束award_given;成员函数 number_fraction(N 实数( 返回实数为数字真实;开始num :=(self.number_staff_supervised(;返回编号;结束number_fraction;结束;

现在发出 SQL。输出:

ENAME.FIRSTNAME E.AWARD_GIVEN()
Rohit           gold medal
Ram             silver medal

最新更新