-4

私はこの質問で少し問題に直面しています..私は知っていることをしました できれば助けてください

a) 「History」テーブルに新しいレコードを挿入するプロシージャ「insert_History」を作成します。
b) 「insert_History」プロシージャを呼び出して、以下に示す事実に基づいて 3 つのレコードを挿入する小さな PL/SQL プログラムを作成します。

私。Mark jackop は 2009 年 1 月 5 日に採用されました。'SH-CLERK' は 2009 年 4 月 6 日に営業担当者 (Job_ID = 'SA-REP') の新しい地位を得ました。前のポジションの終了日が '31/05/2009' であるとします。

テーブル: history---> 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;
4

1 に答える 1

0

最初に、あなたの作業をパッケージに入れます。これにより、物事が整理され、読みやすく/呼び出しやすくなり、戻って物事がどのように機能したかを思い出すのが非常に簡単になります (何ヶ月も手順を見ていなかったのでわかります)正確に何をするのかは忘れてしまいます。) 誰かのコードをリバース エンジニアリングしようとすると、それがどのように機能するかについての説明がほとんどまたはまったくない手順に積み上げられたときに、悪夢を想像することができました。Java/oop プログラムをすべて 1 つのクラスで作成するだけではありません。

また、パッケージを使用することは、それが何をするかを説明するためにコードからがらくたをコメントアウトすることを確認するだけでなく、実行する習慣を身につけるための良い習慣です。

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;

挿入手順はこれで終わりです。次に、このプロシージャを呼び出す何かが必要です。ここでは、アプリケーションまたはアプリケーションの上位レベルからこれらの日付を取得していると想定しているため、開始日と終了日、および従業員名がパラメーターとして入力されます。したがって、これを未処理の手順として作成します。

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;

そしてそれはそれであるべきです。

ノート:

これは私の最善の推測であり、テストしていません。私はかなり漠然とした方向から理解していることから離れています。これらの値をアプリケーションから取得していない場合は、各値を保存してから、パラメーターを使用せずに上記の手順の残りを呼び出す必要があります。

これが役立つか、少なくとも正しい方向に向けられることを願っています!

于 2012-05-17T22:13:30.493 に答える