2016-09-15 8 views
0

別々のテーブルに一時テーブルから挿入するためのPL SQLプロシージャを使用して それif文PLSQL - レコードがすでに

  1. 場合、レコードが使用して複製された場合にどのように私はチェックしますが存在するかどうかを確認するために、カーソル

    :doesntのが存在しない場合、メッセージ(DBMS_OUTPUT.PUT_LINE)の重複を示し、他のレコード

一時テーブルとループを継続

  • を挿入し、次いで存在します
    create table temp_table 
    (job title varchar2(20) 
    ,empname varchar2(30)); 
    

    私はempidempnameと従業員のテーブルを持っているjob_idjob_title でジョブテーブルを持って、jobid

  • +0

    最も簡単なアプローチは、2つのテーブルを外部結合するだけで、一致した行と一致しなかった行を知ることができます。 –

    答えて

    0

    したいPLSQLブロックは以下の通りです。

    テーブル:

    CREATE TABLE temp_table (
    job_title VARCHAR2(20), 
    empname varchar2(30)); 
    
    -------------------------- 
    
    CREATE TABLE job (
    job_id number, 
    job_title VARCHAR2(20)); 
    
    ------------------------------ 
    
    CREATE TABLE emplyee (
    empid number, 
    empname varchar2(30), 
    job_id number 
    ); 
    
    ------------------------------ 
    INSERT INTO temp_table VALUES ('Dan', 'Morgan'); 
    INSERT INTO temp_table VALUES ('Helen', 'Lofstrom'); 
    INSERT INTO temp_table VALUES ('Akiko', 'Toyota'); 
    INSERT INTO temp_table VALUES ('Jackie', 'Stough'); 
    INSERT INTO temp_table VALUES ('Richard', 'Foote'); 
    INSERT INTO temp_table VALUES ('Joe', 'Johnson'); 
    INSERT INTO temp_table VALUES ('Clark', 'Urling'); 
    
    ------------------------- 
    create sequence seq_id start with 1 increment by 1 nocycle; 
    ----------------- 
    

    PL SQLブロック

    declare 
    
        dummy integer; 
        jb_id number; 
        ep_id number; 
        job_cntr number:=0; 
        emp_cntr number:=0; 
        begin 
    
        for rec in (select * from temp_table) 
        loop 
    
         jb_id:= seq_id.nextval*101; 
         ep_id:= seq_id.nextval; 
         ---Test if row exists before inserting 
         select count(*) 
         into dummy 
         from job jb 
         where jb.job_title = rec.job_title; 
    
         if dummy = 0 then  
         insert into job(job_id,job_title) values (jb_id,rec.job_title); 
         else  
         --dbms_output.put_line('Duplicate record in Job table.!!! Records Exis-'||rec.job_title); 
          job_cntr:=job_cntr + 1 ; 
         end if;  
    
         ---Test if row exists before inserting 
         select count(*) 
         into dummy 
         from emplyee emp 
         where emp.empname = rec.empname; 
    
         if dummy = 0 then  
         insert into emplyee(empid,empname,job_id) values (ep_id,rec.empname,jb_id); 
         else  
         --dbms_output.put_line('Duplicate record in Employee..!!! Records Exis-'||rec.empname); 
          emp_cntr := emp_cntr + 1; 
         end if; 
    
        end loop; 
    
         commit; 
    
         dbms_output.put_line('Duplicate record in Job table-'||job_cntr || ' Duplicate record in Employee.' ||emp_cntr); 
    
        end; 
    -- 
    

    試験:

    select * from job; 
    select * from emplyee; 
    
    +0

    おかげさまで、大きな助けになりました!.....「ダン」、「モーガン」の2つのレコードがあれば、これを記録できる方法はありますか?これらが重複していることを示すために –

    +0

    例外を発生させ、それを処理することができます – XING

    +0

    ..... '例外名'を発生させる? –