当我启动Oracle实例时,是否有可能让Oracle在初始化期间运行一些PL / SQL?
我试图在网上找到一些东西,但我的搜索效果不佳。
更具体地说,
如果我发出
$ sqlplus ....
startup mount;
alter database open;
我可以让它然后运行PL / SQL程序吗?
答案 0 :(得分:5)
您正在寻找启动后启动触发器。
参考:https://docs.oracle.com/database/121/LNPLS/create_trigger.htm#LNPLS01374
CREATE TRIGGER my_on_open_trigger
AFTER STARTUP ON DATABASE
BEGIN
<<< DO SOMETHING >>>
END my_on_open_trigger;
/
答案 1 :(得分:0)
我不认为可以设置顺序,这是折叠的真正原因 尽可能为1
你认为错了:)
从Oracle 11g开始,有一个FOLLOWS选项可以让你设置这样的东西。这是一个例子:
SQL> create table test (id varchar2(10));
Table created.
SQL> create or replace trigger t1
2 before insert on test
3 for each row
4 begin
5 dbms_output.put_Line('trigger 1');
6 end;
7 /
Trigger created.
SQL> create or replace trigger t2
2 before insert on test
3 for each row
4 follows t3
5 begin
6 dbms_output.put_Line('trigger 2');
7 end;
8 /
Warning: Trigger created with compilation errors.
SQL> create or replace trigger t3
2 before insert on test
3 for each row
4 follows t1
5 begin
6 dbms_output.put_Line('trigger 3');
7 end;
8 /
Trigger created.
SQL> insert into test values ('A');
trigger 1
trigger 3
trigger 2
1 row created.
SQL>
附注:触发器T2创建时出现错误,因为我说它跟随T3,在T2创建期间不存在。最后,所有这些都是有效的:
SQL> select object_name, status
2 from user_objects
3 where object_name in ('T1', 'T2', 'T3')
4 and object_type = 'TRIGGER';
OBJECT_NAME STATUS
-------------------- -------
T3 VALID
T2 VALID
T1 VALID
SQL>
[编辑,关于AFTER STARTUP触发器]
我在SYS架构中创建了触发器,类似于我之前发布的3个:
SQL> create table test (id number);
Table created.
SQL> create or replace trigger t1
2 after startup on database
3 begin
4 insert into test values (1);
5 end;
6 /
Trigger created.
SQL> create or replace trigger t2
2 after startup on database
3 follows t3
4 begin
5 insert into test values (2);
6 end;
7 /
Warning: Trigger created with compilation errors.
SQL> create or replace trigger t3
2 after startup on database
3 follows t1
4 begin
5 insert into test values (3);
6 end;
7 /
Trigger created.
关闭我的XE,启动它,检查那里有什么:
SQL> show user
USER is "SYS"
SQL> select * From test;
ID
----------
1
2
3
布拉赫!真的,它不像我想的那样有效。
哦,我错了&amp;向你们所有人道歉。