[ORACLE]USSOFT ORACLEトレーニング4日目

4877 ワード

📌 PACKAGE


🤔 セットメニューは何ですか。

  • オブジェクト
  • は、変数、定数、サブルーチンなどの項目を含む.
  • オブジェクト
  • コンパイルが完了するとデータベース
  • に保存される.
  • 他のプログラムは、パッケージ内の項目
  • を参照して実行することもできる.

    🤨 使用理由


    プログラミングの過程で、プログラムのようなサブプログラムの数が幾何級数で増加し、このようなプロジェクトは管理しにくくなり、自分の必要なプロジェクトを見つけることが難しくなります.このような事態を防止するために、PACKAGEの概念は、様々なプロジェクトを容易に管理するためである.

    😶 パッケージの使用方法


    パッケージは、宣言、本文、および実行セクションから構成されます.

    💡 宣言簿

    CREATE OR REPLACE PACKAGE EX_PKG IS -- 패키지 선언
    
    FUNCTION FUNC_1(P_PRODUCT_ID IN NUMBER) -- 패키지로 묶을 함수
    RETURN VARCHAR2;
    
    PROCEDURE PROC_1; -- 패키지로 묶을 프로시저1
    
    PROCEDURE PROC_2(P_PRODUCT_ID IN NUMBER); -- 패키지로 묶을 프로시저2
    
    END EX_PKG; -- 패키지 종료

    💡 本文

    CREATE OR REPLACE PACKAGE BODY EX_PKG IS -- 패키지 본문
    
    --- 패키지 선언부 함수1 ---
    FUNCTION FUNC_1(P_PRODUCT_ID IN NUMBER)
    RETURN VARCHAR2
    IS
    V_PRODUCT_NAME VARCHAR2(100);
    BEGIN
    SELECT
    PRODUCT_NAME
    FROM PRODUCTS
    WHERE
    PRODUCT_ID = P_PRODUCT_ID;
    
    RETURN NVL(PRODUCT_NAME, '존재하지 않는 제품');
    END FUNC_1;
    
    --- 패키지 선언부 프로시저1 ---
    PROCEDURE PROC_1
    IS
    CURSOR EX_CUR IS
    SELECT
    PRODUCT_ID,
    PRODUCT_NAME
    FROM PRODUCTS;
    
    BEGIN
    
    FOR I IN EX_CUR LOOP
    
    DBMS_OUTPUT.PUT_LINE('제품ID:' || I.PRODUCT_ID);
    DBMS_OUTPUT.PUT_LINE('제품명:' || I.PRODUCT_NAME);
    
    END LOOP;
    
    EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM || '에러 발생');
    
    END PROC_1;
    
    --- 패키지 선언부 프로시저2 ---
    PROCEDURE PROC_2(P_PRODUCT_ID IN NUMBER)
    IS
    CURSOR EX_CUR IS
    SELECT EX_CUR IS
    SELECT
    PRODUCT_ID,
    PRODUCT_NAME
    FROM PRODUCTS
    WHERE PRODUCT_ID = P_PRODUCT_ID;
    
    BEGIN
    
    FOR I IN EX_CUR LOOP
    
    DBMS_OUTPUT.PUT_LINE('제품ID:' || I.PRODUCT_ID);
    DBMS_OUTPUT.PUT_LINE('제품명:' || I.PRODUCT_NAME);
    
    END LOOP;
    
    EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM || '에러발생');
    
    END PROC_2;
    
    END EX_PKG; -- 패키지 종료

    💡 執行部

    -- DMBS_OUTPUT.PUT_LINE을 출력하기 위해 사용
    SET SERVEROUTPUT ON;
    
    --- 패키지 실행
    EXEC EX_PKG.FUNC_1(10);
    
    EXEC EX_PKG.PROC_1;
    
    EXEC EX_PKG.PROC_2(10);

    📌 TRIGGER


    🤔 トリガとは?

  • DBシステムにおけるカスタムプロセス
  • は、データ入力、更新、削除などのイベントが発生したときに自動的に実行される
  • TABLEとは別にDATABASEに格納されている.
  • VIEWではなくTABLEのみを定義できます.
  • 主に
  • SQLの制約メソッドによって宣言できない完全性制約を実現し、関連テーブルのデータを一致させるために使用されます.
  • 制約条件とともにデータ整合性を維持する方法として、特定のイベントに対して連続的に自動的に動作する特殊な形式の記憶プロセスと見なすことができる.
  • TRIGGGERのタイプは、文フリップフロップ、行フリップフロップに分けられます.
  • 💡 トリガ文


    トリガ・イベントがトリガが設定されたテーブルで発生した場合、多くのローを変更しても1回のみトリガできます.コラムの値が変わるたびに、自分で実行します.

    💡 ラインフリップフロップ


    条件を満たす複数行に対して複数回フリップフロップを繰り返し実行する方法により、FOREACE ROW WHEN条件をFOREACE ROW WHEN条件と定義する.カラム内のデータ行が変更された場合に実行されます.変更されたローはOLDとNEWでインポートできます.

    😶 トリガの使い方

    CREATE [OR REPLACE] TRIGGER 트리거명
    BEFORE|AFTER
    [동작(INSERT, UPDATE, DELETE)] ON 테이블명
    [REFERENCING NEW | OLD TABLES AS 테이블명]
    [FOR EACH ROW]
    [WHEN 조건식]
    트리거 BODY문
  • OR REPLACE
    生成するトリガと同じ名前があっても、無視して新しいものに更新することに注意してください.
  • AFTER
    テーブル変更後にトリガーされるオプション
  • BEFORE
    テーブルの変更前にトリガーされるオプション
  • アクションオプション
    INSERT、UPDATE、DELETEの実行時にトリガーされるのは
  • です.
  • NEW
    トリガは、新しく追加または変更された値に適用されます.(INSERT:入力する値、UPDATE:変更する値)
  • OLD
    トリガは、変更前の値に適用されます.(UPDATE:変更前値、DELETE:削除する値)
  • WHEN
    トリガの実行時に遵守すべき条件を指定します.(条件を満たすデータのみをトリガ)
  • トリガBODY文
    トリガ本体コードの入力部分
    BEGINで始まり、ENDで終わり、少なくとも1つ以上のSQL文が必要です.エラー
    変数に値を置換する場合は、予約語SETを使用します.
  • 📝 トリガの例

    CREATE OR REPLACE oracle_trigger
     BEFORE
     INSERT ON oracleStudy
     REFERENCING NEW TABLE AS new_tirgger
     FOR EACH ROW
       WHEN new_trigger.점수 = ''
         BEGIN
           SET NEW_table.점수 = '0';
           END;

    🤨 トリガの制限

  • トリガでは、トランザクション制御文(COMMIT、ROLLBACK、SAVEPOINT)は使用できません.
  • トリガは、トリガ文の実行部分として、実行されたトリガ文と同じトランザクションにあります.
  • フリップフロップが掛けられたターゲット(フリップフロップ)文がCOMMIT、ROLLBACKされると、フリップフロップの動作もCOMMIT、ROLLBACKされる.
  • 😮 トリガの管理


    有効/無効

  • ALTER TRAIGGERトリガ名[DISABLE|ENABLE]
  • テーブルのトリガの有効化/無効化
    ALTER TABLEテーブル名[DISABLE|ENABLE]ALL TRAIGGER
  • 修正後に
  • トリガを再コンパイル
    ALTER TRAIGGERトリガ名COMPILE;
  • トリガの削除
    DROP TRAIGGERトリガ名
  • クエリー
  • トリガ
    SELECT * FROM USER_TRIGGERS
  • 📌 JOB


    🤔 JOBとは?

  • DBで作成するPROCEDURE関数は、データベース内のスケジューラが指定する時間に自動的にタスクを実行する機能
  • である.
    JOB QUEUEスケジューリング期間が
  • のJOBを使用できます.
  • 😶 JOBの使い方

  • JOB QUE PROCESS=1:SNPプロシージャの数を指定する
  • JOB QUE INTERVAL=60:SNPプロセスのSLEEP状態での秒数(パッケージ内のプロセス)
  • を指定する.
  • SUBMIT:JOB QUEリストに新規ジョブ
  • を登録する
  • REMOVE:JOB QUEに登録されているJOB
  • を削除
  • CHANGE:JOB QUEに登録されているJOBを変更
  • NEXT DATE:JOB QUEに登録するJOBの運転時間
  • を変更する.
  • INTERVAL:JOB QUEに登録するJOBの実行周期
  • を変更する.
  • WHAT:実行するPROCEDURE OR PACKAGE変更
  • RUN:登録済み特定JOB
  • を手動で実行