忍者ブログ
JavaScript , Java , DOS , HTML(CSS) , JSP , SQL , VB , VBScript , ・・・etc などの覚書
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

参考URLhttp://www.shift-the-oracle.com/sql/merge.html


MERGE INTO USER_MASTER
USING USER_MASTER_IMPORT 
ON ( USER_MASTER.USER_ID = USER_MASTER_IMPORT.USER_ID)
-- 既存レコードの更新
WHEN MATCHED THEN
	UPDATE SET
		USER_NAME = USER_MASTER_IMPORT.USER_NAME,
		DEPT_NO = USER_MASTER_IMPORT.DEPT_NO,
		MODIFIED_ON = SYSDATE
-- 新規レコードの作成
WHEN NOT MATCHED THEN
	INSERT
		( USER_ID, USER_NAME, DEPT_NO )
	VALUES
		( USER_MASTER_IMPORT.USER_ID,
		USER_MASTER_IMPORT.USER_NAME || '(新人)',
		USER_MASTER_IMPORT.DEPT_NO )
PR
引いた時間:time
time=(logoutdt-logindt)*24*60*60

select (:time - mod(:time,3600))/3600 ||'時間'||(mod(:time,3600) - mod(mod(:time,3600),60))/60 ||'分'||mod(mod(:time,3600),60)||'秒' from dual;


to_char(sysdate,'dy')

dy = 月曜日の場合は 月
day = 月曜日の場合は 月曜日
アクセスするプログラムを制限させたい場合、LOGONトリガーでひっかけることができる
以下、例


CREATE OR REPLACE TRIGGER TEST_LOGON_CHK AFTER LOGON ON database
    DECLARE
        w_PROGRAM    VARCHAR2(64);
        w_user        VARCHAR2(30);
        w_hostname    VARCHAR2(16);

    CURSOR c1 IS
        SELECT username, PROGRAM, terminal
            FROM v$session WHERE audsid = userenv('sessionid');
        BEGIN
            OPEN c1;
            FETCH c1 INTO w_user, w_PROGRAM, w_hostname;
            if  (w_user = 'CAD_USER' or w_user = 'TEST_USER')
              and w_PROGRAM='sqlplus.exe'
              and w_hostname like 'NEWS%'
            then
                RAISE_APPLICATION_ERROR(-20001, 'You are not allowed to log into database.');
            end if;
        CLOSE c1;
    END;
/

あるテーブルB にあり テーブルA にないレコードをインポートする方法

OracleではMergeがあるが、取り込むカラムがキーの場合使用出来ない。
よって、以下の方法で行う。

USH_PJTNO がテーブルBのキー及び取り込みたいカラム
CODE がUSH_PJTNOを取り込み先

案1
INSERT INTO テーブルB(USH_PJTNO)
SELECT CODE
 FROM テーブルA
 WHERE WSNO=0 AND TERM_END='4712/12/31' AND CODE LIKE 'PJT%'
MINUS
SELECT USH_PJTNO
 FROM A_WBSPRJ_UNIT

案2
INSERT INTO テーブルB(USH_PJTNO)
SELECT A.CODE FROM テーブルA A
 WHERE NOT EXISTS (
 SELECT B.USH_PJTNO FROM テーブルB B
  WHERE A.CODE = B.USH_PJTNO
 ) AND A.WSNO=0 AND A.TERM_END='4712/12/31' AND CODE LIKE 'PJT%'


******MERGE*(参考 以下の場合、USH_PJTNOがキーの場合エラーになる)********

MERGE INTO テーブルB T
     USING テーブルA F
     ON ( T.USH_PJTNO = F.CODE AND F.WSNO=0)
WHEN MATCHED THEN
             UPDATE SET
         T.USH_PJTNO = F.CODE,
WHEN NOT MATCHED THEN
      INSERT (
         USH_PJTNO
         )
      VALUES (
         F.CODE
         )

HOMENext ≫
ブログ内検索
カレンダー
03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

Copyright © [ moriBlog-memo ] All rights reserved.
Special Template : 忍者ブログ de テンプレート Special Thanks : 忍者ブログCommercial message : [PR]