<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL_Tutorial%2FTrigger%2FSchema_Trigger</id>
		<title>Oracle PL/SQL Tutorial/Trigger/Schema Trigger - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL_Tutorial%2FTrigger%2FSchema_Trigger"/>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Trigger/Schema_Trigger&amp;action=history"/>
		<updated>2026-04-06T12:10:18Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Trigger/Schema_Trigger&amp;diff=3554&amp;oldid=prev</id>
		<title> в 13:45, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Trigger/Schema_Trigger&amp;diff=3554&amp;oldid=prev"/>
				<updated>2010-05-26T13:45:46Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 13:45, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Trigger/Schema_Trigger&amp;diff=3555&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Trigger/Schema_Trigger&amp;diff=3555&amp;oldid=prev"/>
				<updated>2010-05-26T10:06:41Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== AFTER CREATE ON SCHEMA==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE myAudit(&lt;br /&gt;
  2   object_name VARCHAR2(30)NOT NULL,&lt;br /&gt;
  3   Object_type VARCHAR2(30)NOT NULL,&lt;br /&gt;
  4   WHEN_CREATED DATE NOT NULL,&lt;br /&gt;
  5   WHO_CREATED VARCHAR2(30)NOT NULL,&lt;br /&gt;
  6   WHEN_UPDATED DATE,&lt;br /&gt;
  7   WHO_UPDATED VARCHAR2(30)&lt;br /&gt;
  8  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER after_ddl_creation&lt;br /&gt;
  2  AFTER CREATE ON SCHEMA&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    INSERT INTO myAudit VALUES&lt;br /&gt;
  5    (SYS.DICTIONARY_OBJ_NAME,SYS.DICTIONARY_OBJ_TYPE,SYSDATE,USER,NULL,NULL);&lt;br /&gt;
  6  END;&lt;br /&gt;
  7  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE p_dummy&lt;br /&gt;
  2  IS&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    NULL;&lt;br /&gt;
  5  END;&lt;br /&gt;
  6  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT * FROM myAudit;&lt;br /&gt;
OBJECT_NAME                    OBJECT_TYPE&lt;br /&gt;
------------------------------ ------------------------------&lt;br /&gt;
WHEN_CREAT WHO_CREATED                    WHEN_UPDAT&lt;br /&gt;
---------- ------------------------------ ----------&lt;br /&gt;
WHO_UPDATED&lt;br /&gt;
------------------------------&lt;br /&gt;
P_DUMMY                        PROCEDURE&lt;br /&gt;
24-07-2008 sqle                         null&lt;br /&gt;
null&lt;br /&gt;
&lt;br /&gt;
1 row selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table myAudit;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop trigger after_ddl_creation;&lt;br /&gt;
Trigger dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== AFTER DDL ON SCHEMA==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER no_create&lt;br /&gt;
  2  AFTER DDL ON SCHEMA&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    IF ORA_SYSEVENT = &amp;quot;CREATE&amp;quot; THEN&lt;br /&gt;
  5      RAISE_APPLICATION_ERROR(-20000,&amp;quot;Cannot create the &amp;quot; || ORA_DICT_OBJ_TYPE ||&lt;br /&gt;
  6                                     &amp;quot; named &amp;quot;            || ORA_DICT_OBJ_NAME ||&lt;br /&gt;
  7                                     &amp;quot; as requested by &amp;quot;  || ORA_DICT_OBJ_OWNER);&lt;br /&gt;
  8    END IF;&lt;br /&gt;
  9  END;&lt;br /&gt;
 10  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop trigger no_create;&lt;br /&gt;
Trigger dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== AFTER SUSPEND ON SCHEMA==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER after_suspend&lt;br /&gt;
  2  AFTER SUSPEND ON SCHEMA&lt;br /&gt;
  3  DECLARE&lt;br /&gt;
  4    CURSOR curs_get_extents IS&lt;br /&gt;
  5    SELECT max_extents + 1&lt;br /&gt;
  6      FROM user_tables&lt;br /&gt;
  7     WHERE table_name = &amp;quot;MONTHLY_SUMMARY&amp;quot;;&lt;br /&gt;
  8    v_new_max NUMBER;&lt;br /&gt;
  9  BEGIN&lt;br /&gt;
 10    OPEN curs_get_extents;&lt;br /&gt;
 11    FETCH curs_get_extents INTO v_new_max;&lt;br /&gt;
 12    CLOSE curs_get_extents;&lt;br /&gt;
 13    EXECUTE IMMEDIATE &amp;quot;ALTER TABLE MONTHLY_SUMMARY &amp;quot; ||&lt;br /&gt;
 14                      &amp;quot;STORAGE ( MAXEXTENTS &amp;quot;        ||&lt;br /&gt;
 15                      v_new_max                      || &amp;quot;)&amp;quot;;&lt;br /&gt;
 16    DBMS_OUTPUT.PUT_LINE(&amp;quot;Incremented MAXEXTENTS to &amp;quot; || v_new_max);&lt;br /&gt;
 17  END;&lt;br /&gt;
 18  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt; SHO ERR&lt;br /&gt;
No errors.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop trigger after_suspend;&lt;br /&gt;
Trigger dropped.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== ORA_DICT_OBJ_TYPE, ORA_DICT_OBJ_OWNER, ORA_DICT_OBJ_NAME==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER what_column&lt;br /&gt;
  2  AFTER ALTER ON SCHEMA&lt;br /&gt;
  3  DECLARE&lt;br /&gt;
  4    -- cursor to get columns in a table&lt;br /&gt;
  5    CURSOR curs_get_columns ( cp_owner VARCHAR2,&lt;br /&gt;
  6                              cp_table VARCHAR2 ) IS&lt;br /&gt;
  7    SELECT column_name&lt;br /&gt;
  8      FROM all_tab_columns&lt;br /&gt;
  9     WHERE owner = cp_owner&lt;br /&gt;
 10       AND table_name = cp_table;&lt;br /&gt;
 11&lt;br /&gt;
 12  BEGIN&lt;br /&gt;
 13&lt;br /&gt;
 14    IF ORA_DICT_OBJ_TYPE = &amp;quot;TABLE&amp;quot; THEN&lt;br /&gt;
 15&lt;br /&gt;
 16      FOR v_column_rec IN curs_get_columns(ORA_DICT_OBJ_OWNER,&lt;br /&gt;
 17                                           ORA_DICT_OBJ_NAME) LOOP&lt;br /&gt;
 18&lt;br /&gt;
 19        IF ORA_IS_ALTER_COLUMN(v_column_rec.column_name) THEN&lt;br /&gt;
 20&lt;br /&gt;
 21          DBMS_OUTPUT.PUT_LINE(ORA_DICT_OBJ_OWNER        || &amp;quot;.&amp;quot; ||&lt;br /&gt;
 22                               ORA_DICT_OBJ_NAME         || &amp;quot;.&amp;quot; ||&lt;br /&gt;
 23                               v_column_rec.column_name);&lt;br /&gt;
 24&lt;br /&gt;
 25        END IF;&lt;br /&gt;
 26&lt;br /&gt;
 27      END LOOP;&lt;br /&gt;
 28&lt;br /&gt;
 29    END IF;&lt;br /&gt;
 30&lt;br /&gt;
 31  END;&lt;br /&gt;
 32  /&lt;br /&gt;
Trigger created.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Schema trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE ALTER_AUDIT_TRAIL (&lt;br /&gt;
  2      object_owner        VARCHAR2(30),&lt;br /&gt;
  3      object_name         VARCHAR2(30),&lt;br /&gt;
  4      object_type         VARCHAR2(20),&lt;br /&gt;
  5      altered_by_user     VARCHAR2(30),&lt;br /&gt;
  6      alteration_time     DATE&lt;br /&gt;
  7      );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER audit_schema_changes&lt;br /&gt;
  2  AFTER ALTER ON jeff.SCHEMA&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4      INSERT INTO alter_audit_trail&lt;br /&gt;
  5          (object_owner,&lt;br /&gt;
  6           object_name,&lt;br /&gt;
  7           object_type,&lt;br /&gt;
  8           altered_by_user,&lt;br /&gt;
  9           alteration_time&lt;br /&gt;
 10           )&lt;br /&gt;
 11          VALUES (sys.dictionary_obj_owner,&lt;br /&gt;
 12                  sys.dictionary_obj_name,&lt;br /&gt;
 13                  sys.dictionary_obj_type,&lt;br /&gt;
 14                  sys.login_user,&lt;br /&gt;
 15                  sysdate);&lt;br /&gt;
 16  END;&lt;br /&gt;
 17  /&lt;br /&gt;
SQL&amp;gt; Drop TABLE ALTER_AUDIT_TRAIL;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== use event attributes to provide more info==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER town_crier&lt;br /&gt;
  2  AFTER CREATE ON SCHEMA&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4&lt;br /&gt;
  5    DBMS_OUTPUT.PUT_LINE(&amp;quot;I believe you have created a &amp;quot; ||&lt;br /&gt;
  6                         ORA_DICT_OBJ_TYPE || &amp;quot; called &amp;quot; ||&lt;br /&gt;
  7                         ORA_DICT_OBJ_NAME);&lt;br /&gt;
  8  END;&lt;br /&gt;
  9  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SET SERVEROUTPUT ON&lt;br /&gt;
SQL&amp;gt; CREATE TABLE a_table&lt;br /&gt;
  2  (col1 NUMBER);&lt;br /&gt;
I believe you have created a TABLE called A_TABLE&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE INDEX an_index ON a_table(col1);&lt;br /&gt;
I believe you have created a INDEX called AN_INDEX&lt;br /&gt;
Index created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop index an_index;&lt;br /&gt;
Index dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE FUNCTION a_function RETURN BOOLEAN AS&lt;br /&gt;
  2  BEGIN&lt;br /&gt;
  3    RETURN(TRUE);&lt;br /&gt;
  4  END;&lt;br /&gt;
  5  /&lt;br /&gt;
I believe you have created a FUNCTION called A_FUNCTION&lt;br /&gt;
Function created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DROP FUNCTION a_function;&lt;br /&gt;
Function dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; EXEC DBMS_OUTPUT.PUT_LINE(CHR(10));&lt;br /&gt;
&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop trigger town_crier;&lt;br /&gt;
Trigger dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DROP TABLE a_table;&lt;br /&gt;
Table dropped.&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>