在test表上建立了一个触发器如下:
CREATE OR REPLACE TRIGGER TRIGGER_test
AFTER INSERT or update or delete ON TEST
FOR EACH ROW
BEGIN
CASE
WHEN inserting THEN
dbms_output.put_line('deleting');
WHEN updating THEN
begin
test_trigger('updating',:new.bm);
end;
WHEN deleting THEN
dbms_output.put_line('deleting');
dbms_output.put_line(
ld.bm);
END CASE;
END;
test_trigger是一个调用java的存储过程:
create or replace procedure test_trigger(operate varchar2,tableName varchar2)
as language java name
'com.dc.irc.cycle.TestTrigger.operate(java.lang.String,java.lang.String)';
operate的方法体如下:
public static void operate(String operate,String operateTable) throws SQLException
{
DriverManager.registerDriver(
new oracle.jdbc.OracleDriver()
);
Connection conn= DriverManager.getConnection(
"jdbc
racle:thin:@172.31.0.12:1521:bicp",
"scott",
"tiger"
);
String sql = "INSERT INTO test(xh,bm) VALUES(?,?)";
/* 使用try ... catch语句抓取并抛出例外 */
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 4);
pstmt.setString(2,"dddd"
;
pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e)
{
e.printStackTrace();
}
}
test表的结构如下:
SQL> desc test;
名称
空?
类型
-------------------------------------------------
-------------
XH
NOT NULLNUMBER
BM
VARCHAR2(20)
ZQ
VARCHAR2(10)
KSSJ
DATE
JSSJ
DATE
当我执行 update test set bm = 'cc' 时/发生死锁!
|