用以下的sql可以查询出当前session中正在运行的sql信息:
创新互联-专业网站定制、快速模板网站建设、高性价比鹰潭网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式鹰潭网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖鹰潭地区。费用合理售后完善,10多年实体公司更值得信赖。
select
s.module,
sql_text,
sn.osuser,
sn.machine,
s.executions
from
sys.v_$sql
s,
sys.all_users
u,
v$session
sn
where
s.parsing_user_id
=
u.user_id
and
upper(u.username)
in
('username')
and
(upper(s.module)
=
'app.exe')
and
sn.sql_hash_value
=
s.hash_value
and
sn.sql_address
=
s.address
order
by
s.last_load_time
抛出异常,比如:
if new.col1 is null then
RAISE_APPLICATION_ERROR(-20001, 'col1 is null.');
end if;
Oracle的事务开始于一个DML语句。
当以下情况发生时,事务结束:
1、COMMIT/ROLLBACK
2、执行了DDL/DCL语句
3、客户端主动断开数据库的连接(DISCONNECT)
4、数据库关闭(宕机)
另外,一个DDL/DCL语句实际上就是一个事务,其中隐含了COMMIT。
Oracle不需要特别的去指定事务的开始和结束。一个事务的结束就是下一个事务的开始。
可以创建这样一个触发器,在这个时间段内插入数据就报错,数据插不进去就可以了,代码如下:
create
or
replace
trigger
aa_trigger2
before
insert
on
aa
referencing
new
as
n
old
as
o
for
each
row
when
(to_char(sysdate,'hh')
=
'22'
)
declare
begin
raise_application_error(-20009,
'该时间段内禁止插入数据');
exception
when
others
then
raise_application_error(-20009,
'该时间段内禁止插入数据');
end;