27 个解决方案
#1
select可以啊
#2
触发器是针对insert,update,delete的,你的要求不可以使用触发器实现。
#3
你需要执行的这个过程是作什么的呢?
#4
不好意思,看错了,看成insert了。嘿嘿
#5
nicholaz(欲上青天揽明月) :
差点误人子弟!:)
差点误人子弟!:)
#6
是啊!真是不好意思!:)
#7
是想进行一些控制,看它是否符合我的要求
#8
那你可以使用视图,角色,权限,还有一个叫……哎呀忘了
#9
不行吧,我就是需要用自己定义的安全策略加在你说的那些方法之上,
所以才需要获得这个访问,现在就是没办法控制,oracle 有这样的接口吗
所以才需要获得这个访问,现在就是没办法控制,oracle 有这样的接口吗
#10
你是要对用户所能查看的数据进行控制,我说的那些还有安去策略是可以满足需要的。不知道你要进行什么样的控制?
#11
因为我现在做的程序要求这样,你有没办法实时获得select的信息,包括
操作者,操作对象,操作对象的owner等。
我要用操作者的信息与对象的信息进行比较,
操作者,操作对象,操作对象的owner等。
我要用操作者的信息与对象的信息进行比较,
#12
說的不清楚,好像沒有這個觸發器來實現這個功能。能不能換一種方法
去做這個程序
去做這個程序
#13
那你可以使用审计audit
#14
完全可以在应用程序级控制,何必在数据库级控制呢!!???
#15
这是因为大家都想死死挖掘oracle的东西
#16
select 实现trigge功能是可以的!
比如要关注那些人查询过那些数据!
方法:
使用 view 来代替表
在view中用一个函数来表示 列
在这个函数中使用 自治事务 (pragma定义)
在这个事务中完成你想要做的操作
比如要关注那些人查询过那些数据!
方法:
使用 view 来代替表
在view中用一个函数来表示 列
在这个函数中使用 自治事务 (pragma定义)
在这个事务中完成你想要做的操作
#17
大虾快说具体一点
#18
学习ing
#19
大虾是不是说用触发器实现oracle的内部审计?
但这是在需要非常详细的审计信息时用的。
但这是在需要非常详细的审计信息时用的。
#20
需要解释清楚的是:这个实现方式跟 trigger 没有关系!
create view ........ select funcA() a,... from xxx........
在该函数 FuncA 中:
因为在函数中本身是不能有dml操作的,但我们可以这样实现,参考下面的 存储过程的实现
SQL> select * from test1;
A B
---------- --------------------
1 1
3 3
2 2
SQL>
SQL> CREATE or replace PROCEDURE insert_test
2 as
3 PRAGMA AUTONOMOUS_TRANSACTION;
4 BEGIN
5 insert into test1 values(6,6);
6 rollback;
7 END;
8 /
过程已创建。
SQL> begin
2 insert into test1 values(5,5);
3 insert_test;
4 commit;
5 end;
6 /
PL/SQL 过程已成功完成。
SQL> select * from test1;
A B
---------- --------------------
1 1
3 3
2 2
5 5
SQL>
这样在函数中可以进行dml操作并提交或者回退
然后前台查询的人的信息于是被保留在了数据库中
create view ........ select funcA() a,... from xxx........
在该函数 FuncA 中:
因为在函数中本身是不能有dml操作的,但我们可以这样实现,参考下面的 存储过程的实现
SQL> select * from test1;
A B
---------- --------------------
1 1
3 3
2 2
SQL>
SQL> CREATE or replace PROCEDURE insert_test
2 as
3 PRAGMA AUTONOMOUS_TRANSACTION;
4 BEGIN
5 insert into test1 values(6,6);
6 rollback;
7 END;
8 /
过程已创建。
SQL> begin
2 insert into test1 values(5,5);
3 insert_test;
4 commit;
5 end;
6 /
PL/SQL 过程已成功完成。
SQL> select * from test1;
A B
---------- --------------------
1 1
3 3
2 2
5 5
SQL>
这样在函数中可以进行dml操作并提交或者回退
然后前台查询的人的信息于是被保留在了数据库中
#21
原来是这样的。我还以为触发器真的能对select触发呢!
#22
但我怎么觉得结果不对,没有包括6,6?
#23
如果您直接用 select 语句肯定不行,
但是您可以用 update your_table set your_col=your_col where your_condition return into your_variable;
这样,你既可以得倒 select 出来的数据,还能在此句话上触发触发器事件。
但是您可以用 update your_table set your_col=your_col where your_condition return into your_variable;
这样,你既可以得倒 select 出来的数据,还能在此句话上触发触发器事件。
#24
biti_rainy,你说的方法是说在建立视图时引用自己编写的函数吗?
那么,岂不是在对视图进行任何操作的时候都会调用这个函数,而不只select.
我如下做了,发现在操作视图时自治的那个事务被执行了好多遍:
create or replace procedure sqltct
as
pragma autonomous_transaction;
begin
insert into number_test
values(7,'wo');
commit;
end;
create or replace function sel_check(name in varchar2)
return varchar2
is
begin
sqltct;
return name;
end;
create view v_teacher(name,id)
as
select sel_check(name),id from teacher;
结果:
select * from v_teacher;
得到返回结果后
在select * from number_test;
得到的结果中有14行“7 wo”,为什么执行了一个select却在number_test
中插入了14行呢
那么,岂不是在对视图进行任何操作的时候都会调用这个函数,而不只select.
我如下做了,发现在操作视图时自治的那个事务被执行了好多遍:
create or replace procedure sqltct
as
pragma autonomous_transaction;
begin
insert into number_test
values(7,'wo');
commit;
end;
create or replace function sel_check(name in varchar2)
return varchar2
is
begin
sqltct;
return name;
end;
create view v_teacher(name,id)
as
select sel_check(name),id from teacher;
结果:
select * from v_teacher;
得到返回结果后
在select * from number_test;
得到的结果中有14行“7 wo”,为什么执行了一个select却在number_test
中插入了14行呢
#25
这个问题又涉及到另外一个问题了
那就是你对这个视图的操作
可以建立 instead of trigger 处理dml
并且,在函数中要判断,发现是select (或者满足你所期望的条件的时候)才做这个操作,是dml(不满足条件的时候) 则不执行这个自制事务
当然,这种要求除非是对那种高度机密的信息追踪记录
做起来比较麻烦
那就是你对这个视图的操作
可以建立 instead of trigger 处理dml
并且,在函数中要判断,发现是select (或者满足你所期望的条件的时候)才做这个操作,是dml(不满足条件的时候) 则不执行这个自制事务
当然,这种要求除非是对那种高度机密的信息追踪记录
做起来比较麻烦
#26
学习,学习!
#27
呵呵,如果不select funcA()这一列就无法记录了.
建议还是用audit.
建议还是用audit.
#1
select可以啊
#2
触发器是针对insert,update,delete的,你的要求不可以使用触发器实现。
#3
你需要执行的这个过程是作什么的呢?
#4
不好意思,看错了,看成insert了。嘿嘿
#5
nicholaz(欲上青天揽明月) :
差点误人子弟!:)
差点误人子弟!:)
#6
是啊!真是不好意思!:)
#7
是想进行一些控制,看它是否符合我的要求
#8
那你可以使用视图,角色,权限,还有一个叫……哎呀忘了
#9
不行吧,我就是需要用自己定义的安全策略加在你说的那些方法之上,
所以才需要获得这个访问,现在就是没办法控制,oracle 有这样的接口吗
所以才需要获得这个访问,现在就是没办法控制,oracle 有这样的接口吗
#10
你是要对用户所能查看的数据进行控制,我说的那些还有安去策略是可以满足需要的。不知道你要进行什么样的控制?
#11
因为我现在做的程序要求这样,你有没办法实时获得select的信息,包括
操作者,操作对象,操作对象的owner等。
我要用操作者的信息与对象的信息进行比较,
操作者,操作对象,操作对象的owner等。
我要用操作者的信息与对象的信息进行比较,
#12
說的不清楚,好像沒有這個觸發器來實現這個功能。能不能換一種方法
去做這個程序
去做這個程序
#13
那你可以使用审计audit
#14
完全可以在应用程序级控制,何必在数据库级控制呢!!???
#15
这是因为大家都想死死挖掘oracle的东西
#16
select 实现trigge功能是可以的!
比如要关注那些人查询过那些数据!
方法:
使用 view 来代替表
在view中用一个函数来表示 列
在这个函数中使用 自治事务 (pragma定义)
在这个事务中完成你想要做的操作
比如要关注那些人查询过那些数据!
方法:
使用 view 来代替表
在view中用一个函数来表示 列
在这个函数中使用 自治事务 (pragma定义)
在这个事务中完成你想要做的操作
#17
大虾快说具体一点
#18
学习ing
#19
大虾是不是说用触发器实现oracle的内部审计?
但这是在需要非常详细的审计信息时用的。
但这是在需要非常详细的审计信息时用的。
#20
需要解释清楚的是:这个实现方式跟 trigger 没有关系!
create view ........ select funcA() a,... from xxx........
在该函数 FuncA 中:
因为在函数中本身是不能有dml操作的,但我们可以这样实现,参考下面的 存储过程的实现
SQL> select * from test1;
A B
---------- --------------------
1 1
3 3
2 2
SQL>
SQL> CREATE or replace PROCEDURE insert_test
2 as
3 PRAGMA AUTONOMOUS_TRANSACTION;
4 BEGIN
5 insert into test1 values(6,6);
6 rollback;
7 END;
8 /
过程已创建。
SQL> begin
2 insert into test1 values(5,5);
3 insert_test;
4 commit;
5 end;
6 /
PL/SQL 过程已成功完成。
SQL> select * from test1;
A B
---------- --------------------
1 1
3 3
2 2
5 5
SQL>
这样在函数中可以进行dml操作并提交或者回退
然后前台查询的人的信息于是被保留在了数据库中
create view ........ select funcA() a,... from xxx........
在该函数 FuncA 中:
因为在函数中本身是不能有dml操作的,但我们可以这样实现,参考下面的 存储过程的实现
SQL> select * from test1;
A B
---------- --------------------
1 1
3 3
2 2
SQL>
SQL> CREATE or replace PROCEDURE insert_test
2 as
3 PRAGMA AUTONOMOUS_TRANSACTION;
4 BEGIN
5 insert into test1 values(6,6);
6 rollback;
7 END;
8 /
过程已创建。
SQL> begin
2 insert into test1 values(5,5);
3 insert_test;
4 commit;
5 end;
6 /
PL/SQL 过程已成功完成。
SQL> select * from test1;
A B
---------- --------------------
1 1
3 3
2 2
5 5
SQL>
这样在函数中可以进行dml操作并提交或者回退
然后前台查询的人的信息于是被保留在了数据库中
#21
原来是这样的。我还以为触发器真的能对select触发呢!
#22
但我怎么觉得结果不对,没有包括6,6?
#23
如果您直接用 select 语句肯定不行,
但是您可以用 update your_table set your_col=your_col where your_condition return into your_variable;
这样,你既可以得倒 select 出来的数据,还能在此句话上触发触发器事件。
但是您可以用 update your_table set your_col=your_col where your_condition return into your_variable;
这样,你既可以得倒 select 出来的数据,还能在此句话上触发触发器事件。
#24
biti_rainy,你说的方法是说在建立视图时引用自己编写的函数吗?
那么,岂不是在对视图进行任何操作的时候都会调用这个函数,而不只select.
我如下做了,发现在操作视图时自治的那个事务被执行了好多遍:
create or replace procedure sqltct
as
pragma autonomous_transaction;
begin
insert into number_test
values(7,'wo');
commit;
end;
create or replace function sel_check(name in varchar2)
return varchar2
is
begin
sqltct;
return name;
end;
create view v_teacher(name,id)
as
select sel_check(name),id from teacher;
结果:
select * from v_teacher;
得到返回结果后
在select * from number_test;
得到的结果中有14行“7 wo”,为什么执行了一个select却在number_test
中插入了14行呢
那么,岂不是在对视图进行任何操作的时候都会调用这个函数,而不只select.
我如下做了,发现在操作视图时自治的那个事务被执行了好多遍:
create or replace procedure sqltct
as
pragma autonomous_transaction;
begin
insert into number_test
values(7,'wo');
commit;
end;
create or replace function sel_check(name in varchar2)
return varchar2
is
begin
sqltct;
return name;
end;
create view v_teacher(name,id)
as
select sel_check(name),id from teacher;
结果:
select * from v_teacher;
得到返回结果后
在select * from number_test;
得到的结果中有14行“7 wo”,为什么执行了一个select却在number_test
中插入了14行呢
#25
这个问题又涉及到另外一个问题了
那就是你对这个视图的操作
可以建立 instead of trigger 处理dml
并且,在函数中要判断,发现是select (或者满足你所期望的条件的时候)才做这个操作,是dml(不满足条件的时候) 则不执行这个自制事务
当然,这种要求除非是对那种高度机密的信息追踪记录
做起来比较麻烦
那就是你对这个视图的操作
可以建立 instead of trigger 处理dml
并且,在函数中要判断,发现是select (或者满足你所期望的条件的时候)才做这个操作,是dml(不满足条件的时候) 则不执行这个自制事务
当然,这种要求除非是对那种高度机密的信息追踪记录
做起来比较麻烦
#26
学习,学习!
#27
呵呵,如果不select funcA()这一列就无法记录了.
建议还是用audit.
建议还是用audit.