2017-08-11 2 views
1

従業員idが同じ場合、同じデータを複数の行に取り込む方法を教えてください。毎回テーブルに問い合わせることなく、 など。 私は、EMPLOYEE表からの行の下に上記の従業員のためにpl/sqlを使用して複数の行に同じ値を設定する方法

EMPLID CHANGETIME 
------ -------------- 
1234 8/10/2017 
1234 8/11/2017 

を取得する場合、私は名前を取得し、両方の行を移入するNAMEテーブルを照会する必要があります。

EMPLID CHANGETIME FirstNAME LastNAME 
------ ---------- --------- -------- 
1234 08/10/17 JOHN  MATHEW 
1234 08/11/17 JOHN  MATHEW 

私が初めて照会すると、配列またはいくつかの変数に格納し、EMPLIDが以前のものと一致する場合は、同じを投入したいと思います。

パフォーマンスを向上させるためにこれを行うだけです。ヒントがあれば助かります。

今、私はまた、PL内(従業員名を取得するために参加を使用するEMPLOYEE表から

答えて

0

を行がフェッチされるたびに、私はタイプテーブルに一括挿入を使用していますし、それが名前テーブルに行くと検索/ SQL)のような: SELECT e.emplid, e.first_name, e.last_name, c.changetime FROM employee_changes c INNER JOIN employee e ON e.emplid = c.emplid WHERE c.change_time > sysdate - 30 ORDER BY e.emplid, c.change_time

あなたがする場合に選択しますが、カーソルとして使用することができます...

0

私は、あなたが「最終変更時間」のようないくつかの余分な基準を、必要だと思います。あなたは結果キャッシュ機能を使用することを検討すべきである11グラムを使用している場合

0

を「単なるデ最大changetimeを取得し、各従業員の」

SELECT e.EMPLID, e.CHANGETIME, n.FirstNAME, n.LastNAME 
    FROM Employee e, NAME n 
WHERE e.emplid = n.emplid 
    AND e.changetime = (SELECT MAX(e1.changetime) 
         FROM Employee e1 
         WHERE e1.emplid = e.emplid); 

: その場合、あなたはこのような何かをコーディングすることができます。これにより、返された値がメモリに格納されている関数を定義することができます。このような何か:

create or replace function get_name 
    (p_empid pls_integer) 
    return varchar2 
    result_cache relies_on (names) 
is 
    return_value varchar2(30); 
begin 
    select empname into return_value 
    from names 
    where empid = p_empid; 
    return return_value; 
end get_name; 
/ 

注RELIES_ON句:これはオプションですが、それはキャッシングがゆっくりとテーブルを変更するためにのみ有用であるポイントになります。 NAMESテーブルに大量の乱れがあると、Oracleはキャッシュをフラッシュし続け、多くのメリットは得られません。しかし、少なくとも結果は正しいでしょう - 現在のアプローチでは保証できないものがあります。

ここにサンプルがあります。経過時間を無視したが、2回目の呼び出しで同じ従業員名を取得するために必要とされる方法を少しの努力マーク:

SQL> set autotrace on 
SQL> set timing on 
SQL> select get_name(7934) from dual 
    2/

GET_NAME(7934) 
------------------------------------------------------------------------------------------------------------------------------------------------------ 
MILLER 

Elapsed: 00:00:01.25 

Execution Plan 
---------------------------------------------------------- 
Plan hash value: 1388734953 

----------------------------------------------------------------- 
| Id | Operation  | Name | Rows | Cost (%CPU)| Time  | 
----------------------------------------------------------------- 
| 0 | SELECT STATEMENT |  |  1 |  2 (0)| 00:00:01 | 
| 1 | FAST DUAL  |  |  1 |  2 (0)| 00:00:01 | 
----------------------------------------------------------------- 

Statistics 
---------------------------------------------------------- 
     842 recursive calls 
     166 db block gets 
     1074 consistent gets 
     44 physical reads 
     30616 redo size 
     499 bytes sent via SQL*Net to client 
     437 bytes received via SQL*Net from client 
      2 SQL*Net roundtrips to/from client 
     134 sorts (memory) 
      0 sorts (disk) 
      1 rows processed 

SQL> 

第二コール:

SQL> r 
    1* select get_name(7934) from dual 

GET_NAME(7934) 
------------------------------------------------------------------------------------------------------------------------------------------------------ 
MILLER 

Elapsed: 00:00:00.13 

Execution Plan 
---------------------------------------------------------- 
Plan hash value: 1388734953 

----------------------------------------------------------------- 
| Id | Operation  | Name | Rows | Cost (%CPU)| Time  | 
----------------------------------------------------------------- 
| 0 | SELECT STATEMENT |  |  1 |  2 (0)| 00:00:01 | 
| 1 | FAST DUAL  |  |  1 |  2 (0)| 00:00:01 | 
-----------------------------------------------------------------  

Statistics 
---------------------------------------------------------- 
      0 recursive calls 
      0 db block gets 
      0 consistent gets 
      0 physical reads 
      0 redo size 
     499 bytes sent via SQL*Net to client 
     437 bytes received via SQL*Net from client 
      2 SQL*Net roundtrips to/from client 
      0 sorts (memory) 
      0 sorts (disk) 
      1 rows processed 

SQL> 

ドキュメントはこの気の利いた機能の多くを持っています。 Find out more

関連する問題