我的应用程序拥有用户(和子类型申请人)和工作,申请人可以提交工作申请。我有对象类型和表格设置如下:
create or replace type user_typ as object(
user_id number(19,0),
username nvarchar2(40 char)
)NOT FINAL;
我从这里继承了applicant_typ:
create or replace type applicant_typ under user_typ (
resume_text nclob
);
我的设计涉及申请人可以申请的工作。为此,我按如下方式创建了一个application_typ:
create or replace TYPE Application_typ AS OBJECT (
application_id NUMBER,
candidate applicant_typ,
time_of_app DATE
);
CREATE TYPE Application_tab IS TABLE OF Application_typ;
现在我创建了一个名为Job_typ的对象类型,以及一个包含这些对象的表,其中有一个用于应用程序的嵌套表:
CREATE OR REPLACE TYPE Job_typ AS OBJECT (
job_ID NUMBER,
description NVARCHAR2(1000),
name NVARCHAR2(200),
application Application_tab
);
CREATE TABLE Job_tab OF Job_typ
NESTED TABLE application STORE AS application_nt;
所有这一切都很好。我将一些作业插入job_tab表中,如下所示:
INSERT INTO job_tab VALUES (1, 'The Software Developer will be responsible for authoring high-quality software...',
'Software Developer', NULL);
INSERT INTO job_tab VALUES (2, 'This position requires a team player and a self-starter with experience leading... ',
'Project Manager', NULL);
INSERT INTO job_tab VALUES (3, 'In the first year of this unique 24-month program, you rotate through various...',
'Store Manager', NULL);
请注意,此时嵌套表属性的应用程序'具有所有作业的NULL值。假设我已经在名为applicant_table的表中有一些申请人,其类型为applicant_typ。如何为作业创建和插入新应用程序?
我尝试了一些类似的事情:
UPDATE job_tab
SET application = application_typ (
1,
Applicant_typ(SELECT VALUE(a) from applicant_table a where user_id=1),
'12-MAY-2014')
WHERE job_id=1
但这不起作用。
答案 0 :(得分:0)
考虑这样的事情
merge into job_tab D
using (select t.a app_typ from applicant_table t where t.a.user_id = 1) S
on (job_id = 1)
when matched then
update
set application = Application_tab(Application_typ(1,
s.app_typ,
to_date('12-05-2014', 'DD-MM-YYYY')));
此外,我建议使用其他一些命名约定,乍一看非常复杂。