REF查询对象关系数据库

时间:2016-03-17 22:49:37

标签: sql oracle object-relational-model

所以目前我的数据库如下:

//branch table
create type branch_Type as object(bID number(6), branch_id ref branch_Type, b_street varchar2(20), b_city varchar2(20), b_p_code varchar2(8), b_bPhone number(14));

create table branch of branch_Type;

INSERT INTO branch VALUES(branch_Type('901', NULL, 'Market', 'Edinburgh', 'EH5 1AB', '01311235560'));

INSERT INTO branch VALUES(branch_Type('908', NULL, 'Bridge', 'Glasgow', 'G18 1QQ', '01413214556'));

insert into branch SELECT branch_Type('901', ref(e), b_street, b_city, b_p_code, b_bPhone) from branch e where e.BID = '901';

insert into branch SELECT branch_Type('908', ref(e), b_street, b_city, b_p_code, b_bPhone) from branch e where e.BID = '908';

//employee table
create type employee_Type as object(e_bid ref branch_Type, empID number(8), e_street varchar2(20), e_city varchar2(20), e_p_code varchar2(8), e_title varchar2(4), e_firstname_surname varchar2(20), emphomephone number(14), emp_mobile_1_2 number(22), supervisorID number(6), e_position varchar2(20), salary number(5), e_ninum varchar2(8), joindate date);

create table employee of employee_Type;

insert into employee select ref(e), '101', 'Dart', 'Edinburgh', 'EH1 05T', 'Mrs', 'Alison Smith', '01312125555', '0770562344307907812345', NULL, 'Head', '50000', 'NI001', '01-FEB-06'
from branch e where e.bid = '901';

insert into employee select ref(e), '105', 'New', 'Edinburgh', 'EH2 4AB', 'Mr', 'John William', 01312031990, 0790231455107701234567, '101', 'Manager', '40000', 'NI010', '04-MAR-07'
from branch e where e.bid = '901';

insert into employee select ref(e), '108', 'Old', 'Edinburgh', 'EH9 4BB', 'Mr', 'Mark Slack', 01312102211, NULL, '105', 'accountant', '30000', 'NI120', '01-Feb-09'
from branch e where e.bid = 901;

insert into employee select ref(e), '804', 'Adam', 'Edinburgh', 'EH1 6EA', 'Mr', 'Jack Smith', 01311112223, 0781209890, '801', 'Leader', '35000', 'NI810', '05-Feb-08'
from branch e where e.bid = 908;

select e_bid from EMPLOYEE where e_bid = '901'; //query I'm using

我试图在employee表中查询引用分支表的出价,但是当我运行工作表时,脚本输出告诉我没有选择行。

1 个答案:

答案 0 :(得分:0)

char *three=(char[]){'2','5','8','\0'}; 是对分支对象的引用,不引用对象中包含的e_bid列。你想要:

bID

我看不出你的SELECT e_bid FROM EMPLOYEE WHERE DEREF(e_bid).bID = 901; 需要包含自引用的原因(当你设置它时,你创建了一个分支的副本,因此会有一个BRANCH_TYPE为{{1}的实例它引用自身的另一个地方。)

您正在重复表中的几个结构,并且可能是更好的结构:

branch_id
相关问题