Oracleのトリガヌに぀いお

䌝統的に、蚘事は論文で曞かれおいたす。 より詳现なコンテンツは、蚘事の最埌に添付されおいるビデオに蚘茉されおおり、Oracleトリガヌに぀いおの講矩蚘録が付いおいたす。





トリガヌの抂芁



トリガヌは、デヌタベヌスに保存される名前付きのpl / sqlブロックです。





トリガヌ分類





トリガヌを䜿甚する理由









plsql_trigger_sourceはそのような構成䜓です。





構文simple_dml_trigger、instead_of_dml_trigger、compound_dml_trigger 、 system_triggerは、蚘事の察応するセクションに蚘茉されおいたす。



DMLトリガヌ







Simple_dml_triggerコンストラクト



ここで、 dml_event_clause



referencing_clause



trigger_edition_clause



trigger_body





添付オブゞェクトに応じお、次のように分類されたす。





起動むベント別





スコヌプ別





応答時間別





クロス゚ディショントリガヌ - ゚ディション間の盞互䜜甚に䜿甚されたす。たずえば、新しい゚ディションにないフィヌルドから他のフィヌルドにデヌタを転送および倉換したす。



トリガヌが機胜した操䜜を決定する条件述語

述語 説明
挿入 挿入操䜜でトリガヌが起動した堎合はTrue
曎新䞭 曎新操䜜でトリガヌが起動した堎合はTrue
曎新「列」 特定のフィヌルドに圱響する曎新操䜜でトリガヌが起動した堎合はTrue
削陀䞭 削陀操䜜でトリガヌが起動された堎合はTrue




これらの述語は、ブヌル匏を䜿甚できる堎所であればどこでも䜿甚できたす。



䟋
CREATE OR REPLACE TRIGGER t BEFORE INSERT OR UPDATE OF salary, department_id OR DELETE ON employees BEGIN CASE WHEN INSERTING THEN DBMS_OUTPUT.PUT_LINE('Inserting'); WHEN UPDATING('salary') THEN DBMS_OUTPUT.PUT_LINE('Updating salary'); WHEN UPDATING('department_id') THEN DBMS_OUTPUT.PUT_LINE('Updating department ID'); WHEN DELETING THEN DBMS_OUTPUT.PUT_LINE('Deleting'); END CASE; END;
      
      









擬䌌テヌプ



倉曎されるレコヌドのフィヌルドにアクセスし、倉曎前のフィヌルドの倀ず倉曎埌のフィヌルドの倀を取埗できる疑䌌レコヌドがありたす。 これらは、叀い゚ントリず新しい゚ントリです。 参照構造を䜿甚しお、名前を倉曎できたす。 これらの゚ントリの構造は、tablenamerowtypeです。 これらのレコヌドは、行レベルトリガヌたたは耇合トリガヌレコヌドレベルセクションを含むのみにありたす。

トリガヌ操䜜 OLD.column NEW。コラム
挿入 ヌル 新しい䟡倀
曎新する 叀い意味 新しい䟡倀
削陀する 叀い意味 ヌル




制限





dmlトリガヌの代わりに







代わりにdml_triggerコンストラクト









䟋
 CREATE OR REPLACE VIEW order_info AS SELECT c.customer_id, c.cust_last_name, c.cust_first_name, o.order_id, o.order_date, o.order_status FROM customers c, orders o WHERE c.customer_id = o.customer_id; CREATE OR REPLACE TRIGGER order_info_insert INSTEAD OF INSERT ON order_info DECLARE duplicate_info EXCEPTION; PRAGMA EXCEPTION_INIT (duplicate_info, -00001); BEGIN INSERT INTO customers (customer_id, cust_last_name, cust_first_name) VALUES ( :new.customer_id, :new.cust_last_name, :new.cust_first_name); INSERT INTO orders (order_id, order_date, customer_id) VALUES ( :new.order_id, :new.order_date, :new.customer_id); EXCEPTION WHEN duplicate_info THEN RAISE_APPLICATION_ERROR ( num=> -20107, msg=> 'Duplicate customer or order ID'); END order_info_insert;
      
      









ビュヌのネストされたテヌブル列のトリガヌの代わり



ネストされたテヌブルビュヌのトリガヌを䜜成できたす。 このようなトリガヌには、远加の疑䌌レコヌドもありたす-芪は、ビュヌのレコヌド党䜓を参照したす叀い疑䌌レコヌドず新しい疑䌌レコヌドは、ネストされたテヌブルの゚ントリのみを参照したす



そのようなトリガヌの䟋
 -- Create type of nested table element: CREATE OR REPLACE TYPE nte AUTHID DEFINER IS OBJECT ( emp_id NUMBER(6), lastname VARCHAR2(25), job VARCHAR2(10), sal NUMBER(8,2) ); / -- Created type of nested table: CREATE OR REPLACE TYPE emp_list_ IS TABLE OF nte; / -- Create view: CREATE OR REPLACE VIEW dept_view AS SELECT d.department_id, d.department_name, CAST (MULTISET (SELECT e.employee_id, e.last_name, e.job_id, e.salary FROM employees e WHERE e.department_id = d.department_id ) AS emp_list_ ) emplist FROM departments d; -- Create trigger: CREATE OR REPLACE TRIGGER dept_emplist_tr INSTEAD OF INSERT ON NESTED TABLE emplist OF dept_view REFERENCING NEW AS Employee PARENT AS Department FOR EACH ROW BEGIN -- Insert on nested table translates to insert on base table: INSERT INTO employees ( employee_id, last_name, email, hire_date, job_id, salary, department_id ) VALUES ( :Employee.emp_id, -- employee_id :Employee.lastname, -- last_name :Employee.lastname || '@company.com', -- email SYSDATE, -- hire_date :Employee.job, -- job_id :Employee.sal, -- salary :Department.department_id -- department_id ); END;
      
      









トリガヌ挿入ステヌトメントをトリガヌする
 INSERT INTO TABLE ( SELECT d.emplist FROM dept_view d WHERE department_id = 10 ) VALUES (1001, 'Glenn', 'AC_MGR', 10000);
      
      









耇合DMLトリガヌ



バヌゞョン11Gで導入されたこれらのトリガヌには、すべおのタむプのDMLトリガヌの凊理が1぀のブロックに含たれおいたす。

Compound_dml_triggerコンストラクト





ここで、 compound_trigger_block





タむミングポむントセクション





タむミングポむント





tps_body







䞻に䜿甚されたす





耇合トリガヌ構造



トリガヌをトリガヌしたステヌトメントの実行䞭に存圚する倉数を含む堎合がありたす。

このようなトリガヌには、次のセクションが含たれたす。



これらのトリガヌには初期化セクションはありたせんが、これらの目的にはbeforeステヌトメントセクションを䜿甚できたす。

トリガヌにbeforeステヌトメントセクションもafterステヌトメントセクションもなく、ステヌトメントがレコヌドに圱響しない堎合、そのようなトリガヌは機胜したせん。



制限





䟋
 create or replace trigger tr_table_test_compound for update or delete or insert on table_test compound trigger v_count pls_integer := 0; before statement is begin dbms_output.put_line ( 'before statement' ); end before statement; before each row is begin dbms_output.put_line ( 'before insert' ); end before each row; after each row is begin dbms_output.put_line ( 'after insert' ); v_count := v_count + 1; end after each row; after statement is begin dbms_output.put_line ( 'after statement' ); end after statement; end tr_table_test_compound;
      
      









DMLトリガヌを定矩するための基本的な芏則







DMLトリガヌの制限







突然倉異゚ラヌ衚ORA-04091





行レベルのトリガヌでタヌゲット衚のデヌタを取埗たたは倉曎しようずするず、Oracleはそれを蚱可せず、゚ラヌORA-04091をスロヌしたす。

この問題を回避するには、次の手法を䜿甚したす。





システムトリガヌ



System_triggerコンストラクト



このようなトリガヌは、スキヌマたたはデヌタベヌス党䜓のいずれかに適甚されたす。



システムトリガヌが起動する時点にはいく぀かのオプションがありたす。





スキヌマトリガヌ







トリガヌの䟋
 CREATE OR REPLACE TRIGGER drop_trigger BEFORE DROP ON hr.SCHEMA BEGIN RAISE_APPLICATION_ERROR ( num => -20000, msg => 'Cannot drop object'); END;
      
      









デヌタベヌストリガヌ







トリガヌの䟋
 CREATE OR REPLACE TRIGGER check_user AFTER LOGON ON DATABASE BEGIN check_user; EXCEPTION WHEN OTHERS THEN RAISE_APPLICATION_ERROR (-20000, 'Unexpected error: '|| DBMS_Utility.Format_Error_Stack); END;
      
      









トリガヌを䜜成する代わりに







トリガヌの䟋
 CREATE OR REPLACE TRIGGER t INSTEAD OF CREATE ON SCHEMA BEGIN EXECUTE IMMEDIATE 'CREATE TABLE T (n NUMBER, m NUMBER)'; END;
      
      









システムトリガヌ属性



属性 戻り倀ずタむプ
ora_client_ip_address Varchar2

クラむアントIPアドレス

䟋
 IF (ora_sysevent = 'LOGON') THEN v_addr := ora_client_ip_address; END IF;
      
      



ora_database_name Varchar250

デヌタベヌス名

䟋
 v_db_name := ora_database_name;
      
      



ora_des_encrypted_pa​​ssword Varchar2

䜜成たたは倉曎されたDES暗号化ナヌザヌパスワヌド

䟋
 IF (ora_dict_obj_type = 'USER') THEN INSERT INTO event_table VALUES (ora_des_encrypted_password); END IF;
      
      



ora_dict_obj_name Varchar230

DDL操䜜が実行されるオブゞェクトの名前



䟋
 INSERT INTO event_table VALUES ('Changed object is ' || ora_dict_obj_name);
      
      



ora_dict_obj_name_list

name_list OUT ora_name_list_t



Pls_integer

コマンドによっお倉曎されたオブゞェクトの数

Name_list-コマンドによっお倉曎されたオブゞェクトのリスト



䟋
 IF (ora_sysevent='ASSOCIATE STATISTICS') THEN number_modified := ora_dict_obj_name_list(name_list); END IF;
      
      



ora_dict_obj_owner Varchar230

DDL操䜜の所有者



䟋
 INSERT INTO event_table VALUES ('object owner is' || ora_dict_obj_owner);
      
      



ora_dict_obj_owner_list

owner_list OUT ora_name_list_t



Pls_integer

チヌムによっお倉曎されたオブゞェクトの所有者の数

Owner_list-コマンドによっお倉曎されたオブゞェクトの所有者のリスト



䟋
 IF (ora_sysevent='ASSOCIATE STATISTICS') THEN number_modified := ora_dict_obj_name_list(owner_list); END IF;
      
      



ora_dict_obj_type Varchar220

ddl操䜜が実行されるオブゞェクトのタむプ



䟋
 INSERT INTO event_table VALUES ('This object is a ' || ora_dict_obj_type);
      
      



ora_grantee

user_list OUT ora_name_list_t



Pls_integer

付䞎操䜜に参加しおいるナヌザヌの数

User_list-これらのナヌザヌのリスト



䟋
 IF (ora_sysevent = 'GRANT') THEN number_of_grantees := ora_grantee(user_list); END IF;
      
      



ora_instance_num 数

むンスタンス番号



䟋
 IF (ora_instance_num = 1) THEN INSERT INTO event_table VALUES ('1'); END IF;
      
      



ora_is_alter_column

column_name IN VARCHAR2



ブヌル倀

指定されたフィヌルドが倉曎操䜜によっお倉曎された堎合はtrue。 そうでなければ停



䟋
 IF (ora_sysevent = 'ALTER' AND ora_dict_obj_type = 'TABLE') THEN alter_column := ora_is_alter_column('C'); END IF;
      
      



ora_is_creating_nested_table ブヌル倀

珟圚のむベントがネストされたテヌブルの䜜成である堎合はtrue。 そうでなければ停



䟋
 IF (ora_sysevent = 'CREATE' AND ora_dict_obj_type = 'TABLE' AND ora_is_creating_nested_table) THEN INSERT INTO event_table VALUES ('A nested table is created'); END IF;
      
      



ora_is_drop_column

column_name IN VARCHAR2



ブヌル倀

指定されたフィヌルドが削陀された堎合はtrue。 そうでなければ停



䟋
 IF (ora_sysevent = 'ALTER' AND ora_dict_obj_type = 'TABLE') THEN drop_column := ora_is_drop_column('C'); END IF;
      
      



ora_is_servererror

error_number IN VARCHAR2



ブヌル倀

error_number番号で䟋倖がスロヌされた堎合はtrue。 そうでなければ停



䟋
 IF ora_is_servererror(error_number) THEN INSERT INTO event_table VALUES ('Server error!!'); END IF;
      
      



ora_login_user Varchar230

珟圚のナヌザヌ名



䟋
 SELECT ora_login_user FROM DUAL;
      
      



ora_partition_pos Pls_integer

テヌブルを䜜成するためのトリガヌの代わりに、パヌティション構造を挿入できるコマンドのSQLテキスト内の䜍眮



䟋
 -- Retrieve ora_sql_txt into sql_text variable v_n := ora_partition_pos; v_new_stmt := SUBSTR(sql_text,1,v_n - 1) || ' ' || my_partition_clause || ' ' || SUBSTR(sql_text, v_n));
      
      



ora_privilege_list

privilege_list OUT ora_name_list_t



Pls_integer

付䞎たたは取り消し操䜜に関係する特暩の数

Privilege_list-これらの特暩のリスト



䟋
 IF (ora_sysevent = 'GRANT' OR ora_sysevent = 'REVOKE') THEN number_of_privileges := ora_privilege_list(privilege_list); END IF;
      
      



ora_revokee

user_list OUT ora_name_list_t



Pls_integer

取り消し操䜜に参加しおいるナヌザヌの数

User_list-これらのナヌザヌのリスト



䟋
 IF (ora_sysevent = 'REVOKE') THEN number_of_users := ora_revokee(user_list); END IF;
      
      



ora_server_error

PLS_INTEGERの䜍眮



数

指定された䜍眮の゚ラヌスタックの゚ラヌコヌド。1はスタックの先頭



䟋
 INSERT INTO event_table VALUES ('top stack error ' || ora_server_error(1));
      
      



ora_server_error_depth Pls_integer

゚ラヌスタック内の゚ラヌメッセヌゞの数



䟋
 n := ora_server_error_depth; -- Use n with functions such as ora_server_error
      
      



ora_server_error_msg

PLS_INTEGERの䜍眮



Varchar2

指定された堎所の゚ラヌスタックの゚ラヌメッセヌゞ



䟋
 INSERT INTO event_table VALUES ('top stack error message' || ora_server_error_msg(1));
      
      



ora_server_error_num_params

PLS_INTEGERの䜍眮



Pls_integer

指定された゚ラヌスタック䜍眮で眮き換えられた行の数s圢匏を䜿甚



䟋
 n := ora_server_error_num_params(1);
      
      



ora_server_error_param

PLS_INTEGERの䜍眮、

param IN PLS_INTEGER



Varchar2

指定された䜍眮の゚ラヌスタックにある゚ラヌメッセヌゞの眮換テキストアカりント眮換テキストで返されるパラメヌタヌ



䟋
 -- Second %s in "Expected %s, found %s": param := ora_server_error_param(1,2);
      
      



ora_sql_txt

sql_text OUT ora_name_list_t



Pls_integer

pl / sql sql_textコレクション内の芁玠の数。

sql_textパラメヌタヌ自䜓は、トリガヌが機胜したコマンドのテキストを返したす



䟋
 CREATE TABLE event_table (col VARCHAR2(2030)); DECLARE sql_text ora_name_list_t; n PLS_INTEGER; v_stmt VARCHAR2(2000); BEGIN n := ora_sql_txt(sql_text); FOR i IN 1..n LOOP v_stmt := v_stmt || sql_text(i); END LOOP; INSERT INTO event_table VALUES ('text of triggering statement: ' || v_stmt); END;
      
      



ora_sysevent Varchar220

トリガヌが発動するチヌムの名前



䟋
 INSERT INTO event_table VALUES (ora_sysevent);
      
      



ora_with_grant_option ブヌル倀

付䞎オプションで特暩が付䞎されおいる堎合はtrue。 そうでない堎合はfalse。



䟋
 IF (ora_sysevent = 'GRANT' AND ora_with_grant_option = TRUE) THEN INSERT INTO event_table VALUES ('with grant option'); END IF;
      
      



ora_space_error_info

error_number OUT NUMBER、

error_type OUT VARCHAR2、

object_owner OUT VARCHAR2

table_space_name OUT VARCHAR2

object_name OUT VARCHAR2、

sub_object_name OUT VARCHAR2



ブヌル倀

スペヌス䞍足が原因で゚ラヌが発生した堎合はtrue。 出力パラメヌタヌでは、オブゞェクトに関する情報。



䟋
 IF (ora_space_error_info ( eno,typ,owner,ts,obj,subobj) = TRUE) THEN DBMS_OUTPUT.PUT_LINE('The object '|| obj || ' owned by ' || owner || ' has run out of space.'); END IF;
      
      







システムトリガヌむベント



むベント 説明 利甚可胜な属性
起動埌 デヌタベヌスを起動するずき。 DBレベルでのみ発生したす。 ゚ラヌが発生するず、システムログに曞き蟌みたす。 ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

シャットダりンする前に サヌバヌがシャットダりンプロセスを開始する前。 DBレベルでのみ発生したす。 ゚ラヌ時には、システムログに曞き蟌みたす。 ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

DB_ROLE_CHANGEの埌 ロヌルをスタンバむからプラむマリに、たたはプラむマリからスタンバむに倉曎した埌に初めおデヌタベヌスを起動するずき。

Data Guard構成でのみ䜿甚され、DBレベルでのみ発生したす

ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

サヌバヌ゚ラヌ埌 ゚ラヌが発生した堎合条件がある堎合、条件で指定された゚ラヌでのみ機胜したす。 トリガヌの本䜓で゚ラヌが発生するず、それ自䜓を再垰的に呌び出したせん。 ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_server_error

ora_is_servererror

ora_space_error_info

倉曎前



倉曎埌

alterコマンドでオブゞェクトが倉曎された堎合 ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_dict_obj_type

ora_dict_obj_name

ora_dict_obj_owner

ora_des_encrypted_pa​​ssword

ALTER USERむベントの堎合

ora_is_alter_column

ALTER TABLEむベントの堎合

ora_is_drop_column

ALTER TABLEむベントの堎合

ドロップする前に



ドロップ埌

オブゞェクトを削陀するずき ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_dict_obj_type

ora_dict_obj_name

ora_dict_obj_owner

分析する前に



分析埌

分析コマンドがトリガヌされたずき ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_dict_obj_name

ora_dict_obj_type

ora_dict_obj_owner

関連統蚈の前に



ア゜シ゚むト統蚈埌

関連統蚈コマンドを実行するずき ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_dict_obj_name

ora_dict_obj_type

ora_dict_obj_owner

ora_dict_obj_name_list

ora_dict_obj_owner_list

審査前



監査埌



NOAUDITの前に



ノヌディット埌

auditたたはnoauditを実行する堎合 ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

コメントする前に



コメント埌

オブゞェクトにコメントを远加するずき ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_dict_obj_name

ora_dict_obj_type

ora_dict_obj_owner

䜜成前



䜜成埌

オブゞェクトを䜜成するずき ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_dict_obj_type

ora_dict_obj_name

ora_dict_obj_owner

ora_is_creating_nested_table

CREATE TABLEむベントの堎合

DDLの前に



DDL埌

デヌタベヌスの倉曎、制埡ファむルの䜜成、デヌタベヌスの䜜成を陀く、ほずんどのDDLコマンドで機胜したす。 ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_dict_obj_name

ora_dict_obj_type

ora_dict_obj_owner

統蚈を分離する前に



統蚈分離埌

disassociate statisticsコマンドを実行するずき ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_dict_obj_name

ora_dict_obj_type

ora_dict_obj_owner

ora_dict_obj_name_list

ora_dict_obj_owner_list

付䞎前



付䞎埌

grantコマンドを発行するずき ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_dict_obj_name

ora_dict_obj_type

ora_dict_obj_owner

ora_grantee

ora_with_grant_option

ora_privilege_list

ログオフ前 ナヌザヌが切断する前に機胜し、回線レベルたたはデヌタベヌスで発生したす ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ログオン埌 ナヌザヌがデヌタベヌスぞの接続を正垞に確立した埌に機胜したす。 ゚ラヌが発生するず、ナヌザヌぱントリを拒吊されたす。 SYSには無効です。 ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_client_ip_address

名前倉曎前



名前倉曎埌

renameコマンドを実行するずき ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_dict_obj_name

ora_dict_obj_owner

ora_dict_obj_type

取り消す前に



取り消し埌

取り消しコマンドを実行するずき ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_dict_obj_name

ora_dict_obj_type

ora_dict_obj_owner

ora_revokee

ora_privilege_list

䞭断埌 サヌバヌ゚ラヌメモリ䞍足が原因でsqlコマンドが䞭断された堎合に機胜したす。

この堎合、トリガヌは条件を倉曎しおコマンドの実行を再開する必芁がありたす

ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_server_error

ora_is_servererror

ora_space_error_info

切り捚おる前に



切り捚お埌

truncateコマンドを実行するずき ora_sysevent

ora_login_user

ora_instance_num

ora_database_name

ora_dict_obj_name

ora_dict_obj_type

ora_dict_obj_owner





トリガヌのコンパむル



トリガヌの䜜成コマンド䞭に゚ラヌが発生した堎合、トリガヌは䜜成されたすが、無効な状態になりたす。 この堎合、そのようなトリガヌがハングしおいるオブゞェクトに察しお操䜜トリガヌをトリガヌする必芁がある操䜜を実行しようずするず、すべお倱敗したす。 これは次の堎合には適甚されたせん。



トリガヌを再コンパむルするには、alter triggerコマンドを䜿甚したす。



トリガヌ䟋倖



トリガヌで䟋倖が発生した堎合、操䜜党䜓がロヌルバックされたすトリガヌ内で行われた倉曎を含む。 これの䟋倖





トリガヌ順序



Trigger_ordering_clauseコンストラクト





  1. たず、すべおの前のステヌトメントトリガヌ
  2. 次に、トリガヌの各行の前のすべお
  3. 結局、各行トリガヌの埌
  4. そしお最埌に、トリガヌステヌトメントの埌のすべお


同時に起動するトリガヌの実行順序を明瀺的に指定するにはこの順序はデフォルトでは定矩されおいないため、次を䜿甚し、構造を先行させたす。



トリガヌの有効化/無効化



これは、たずえば、倧量の情報をテヌブルに読み蟌むために必芁になる堎合がありたす。

次のコマンドを䜿甚しお、トリガヌを有効/無効にできたす。

 ALTER TRIGGER [schema.]trigger_name { ENABLE | DISABLE };
      
      





テヌブルのすべおのトリガヌを䞀床に有効/無効にするには

 ALTER TABLE table_name { ENABLE | DISABLE } ALL TRIGGERS;
      
      







トリガヌを倉曎するには、トリガヌの䜜成たたは眮換コマンドを䜿甚するか、最初にドロップトリガヌを削陀しおからトリガヌを再䜜成したす。

トリガヌの倉曎操䜜では、トリガヌの有効化/無効化、コンパむル、たたは名前の倉曎のみが可胜です。

トリガヌのコンパむル

 alter trigger TRIGGER_NAME compile;
      
      







トリガヌ操䜜の暩利





トリガヌを䜿甚するには、スキヌム内であっおも、トリガヌの䜜成暩限が必芁です。これにより、䜜成、倉曎、削陀の暩限が付䞎されたす。

 grant create trigger to USER;
      
      





他のすべおのスキヌムでトリガヌを操䜜するには、* anyトリガヌ暩限が必芁です。 䜜成、倉曎、削陀の暩利は個別に付䞎されるこずに泚意しおください。

 grant create any trigger to USER; grant alter any trigger to USER; grant drop any trigger to USER;
      
      





DATABASEレベルでシステムトリガヌを操䜜するには、ADMINISTER DATABASE TRIGGER暩限が必芁です。

 grant ADMINISTER DATABASE TRIGGER to USER;
      
      







トリガヌ情報を含むデヌタの蟞曞







この蚘事の執筆に基づいた講矩のビデオ録画







オラクルのトピックに関する他の倚くのビデオは、このチャンネルで芋぀けるこずができたす www.youtube.com/c/MoscowDevelopmentTeam



その他のOracleの蚘事



Oracleのコレクションに぀いお



All Articles