我面临这个问题的一个小问题..我做了我所知道的事情 如果你能帮助
a)创建一个过程'insert_History',将新记录插入'历史'表中 b)编写一个小的PL / SQL程序,调用“insert_History”程序,根据下面给出的事实插入三个记录:
我。 Mark Jackop于2009年5月4日获得雇佣,因为'SH-CLERK'在2009年6月4日获得了销售代表(Job_ID ='SA-REP')的新职位。假设前一个职位的结束日期是'31 / 05/2009'。
表:历史---> emp_id,start_date,end_date,job_id,dep_id
表:员工----> emp_id,name,job_id,dep_id
这就是我所做的!
create or replace
procedure insert_History(emp_id in integer , job_id in number)
is
begin
update History
set ?????? = insert into history(.....)
where employees.emp_id= emp_id;
end;
答案 0 :(得分:0)
首先,我会将你的工作放入包装中,因为这样可以使事情井井有条,更容易阅读/调用,并且让我们更容易回去并记住事情是如何运作的(因为我知道在不看之后几个月的过程我会忘记它究竟是做什么的。)我可以想象一下,当它的所有代码只是堆积在几乎没有解释它如何工作的程序时,试图对某人的代码进行逆向工程的噩梦。你不只是在一个类中创建一个java / oop程序!
另外一个侧面说明,使用包只是一个很好的做法,养成做的习惯,并确保你从代码中剔除废话来解释它的作用。
注意看起来并纠正我,如果我错了指示要你插入不更新3条记录。此外,它似乎不仅仅需要emp_id和job_id(开始和结束日期以及dep_id。所以这些值需要通过程序获得。
create or replace
PACKAGE "history" AS
procedure insert_history(pEmp_id integer, pstart_date date, pend_date date, pJob_id number, pdep_id);
end history;
create or replace
package body "history" as
procedure insert_history(pEmp_id in integer, pstart_date in date, pend_date in date, pJob_id in number, pdep_id in number)
is
begin
insert into history(emp_id , start_date , end_date , job_id, dep_id)
values(pEmp_id, pstart_date, pend_date, pJob_id, pdep_id );
commit;
end insert_history;
这就是插入程序。现在您需要一些可以调用此过程的东西。在这里,我假设您从应用程序或应用程序中的更高级别获取这些日期,因此开始和结束日期以及emp名称作为参数进入。 所以我们只是创建这个和优秀的程序。
create or replace procedure call_insert_history(Pemp_name in varchar2(256), varchar2(256), Pstart_date in date, Pend_date in date)
is
Vemp_id number;
Vdep_id number;
Vjob_id number;
begin
--first get the emp_id, dep_id, job_id
select emp_id, dep_id, job_id into Vemp_id, Vdep_id, Vjob_id from employees where emp_name = Pemp_name;
--now call the insert_history procedure using the obtained variables.
history.insert_history(Vemp_id, Pstart_date, Pend_date, Vjob_id, Vdep_id);
end call_insert_history;
应该是它。
注意:强>
这只是我最好的猜测,我还没有测试过。我只是从相当含糊的方向走了我理解的东西。如果您没有从应用程序中获取这些值,则必须存储每个值,然后在不使用参数的情况下调用上述过程的其余部分。
希望这有助于或至少指出正确的方向!