create
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)長子,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
or
replace
trigger
trg_delete_count
before
delete
on
student
for
each
row
begin
delete
from
成績表
where
成績表.學(xué)號=:old.學(xué)號;
commit;
end;
想要實(shí)現(xiàn)類似的功能,不一定要用觸發(fā)器的,可以設(shè)置兩個(gè)表的主鍵和外鍵,設(shè)置級聯(lián)刪除關(guān)系,刪除主鍵時(shí),外鍵表中的記錄也會(huì)自動(dòng)刪除。
create or replace and compile java source named TestClass as
public class TestClass
{
public static String getName(String name) {
String name = "xoxo";
return name " with TTTT";
}
}
然后在觸發(fā)器中調(diào)用:
create or replace trigger TRI_TEST before delete or update or insert on TABLENAME for each row
declare name varchar2(20);
begin
if inserting then
FUNCTION getName( who VARCHAR2 ) RETURN VARCHAR2 IS LANGUAGE JAVA NAME TestClass.getName(java.lang.String) return String';
end if;
end;
把JAVA程序LOAD進(jìn)oracle
在$ORACLE_HOME/bin目錄下有個(gè)LOADJAVA命令,使用這個(gè)命令將剛寫好的JAVA程序LOAD進(jìn)數(shù)據(jù)庫。
loadjava -user test/test@test -o -v -f -r Main.java
如果成功的話,會(huì)打印出來信息提示成功,若程序有編譯錯(cuò)誤的話,也會(huì)提示你錯(cuò)誤的地方。
3。修改權(quán)限
因?yàn)槲业倪@個(gè)JAVA程序里涉及到對文件的讀寫操作,所以要先修改權(quán)限。
首先以管理員身份登錄進(jìn)數(shù)據(jù)庫
sqlplus / as sysdba
然后執(zhí)行
begin
dbms_java.grant_permission('TEST','SYS:java.io.FilePermission','/var/spool/cron/oracle','read,write,execute,delete');
end;
/
執(zhí)行完畢后,在數(shù)據(jù)庫里執(zhí)行上述JAVA程序時(shí),就擁有讀寫該文件的權(quán)限了。
4。創(chuàng)建存儲(chǔ)過程
進(jìn)入到數(shù)據(jù)庫,我是在SQLPLUS命令行
create or replace procedure Modify(name varchar2) as language java name 'Main.modify(java.lang.String)';
/
會(huì)提示創(chuàng)建存儲(chǔ)過程成功。
5。增加trigger
我是在TOAD里直接針對某個(gè)表增加trigger,所以我只寫出關(guān)鍵部分的代碼
begin
if :old.name = 'time' then
Modify(:new.value);
end if;
end;
至此,在ORACLE的trigger里調(diào)用JAVA程序就完成了,后來的實(shí)驗(yàn)證明,每當(dāng)更新這個(gè)表時(shí),都確實(shí)執(zhí)行了該JAVA程序,完成了對文件的讀寫。
首先將你的java代碼放在數(shù)據(jù)庫里:例如
create or replace and compile java source named TestClass as
public class TestClass
{
public static String getName(String name) {
String name = "xoxo";
return name+" with TTTT";
}
}
然后在觸發(fā)器中調(diào)用:
create or replace trigger TRI_TEST before delete or update or insert on TABLENAME for each row
declare name varchar2(20);
begin
if inserting then
FUNCTION getName( who VARCHAR2 ) RETURN VARCHAR2 IS LANGUAGE JAVA NAME TestClass.getName(java.lang.String) return String';
end if;
end;
oracle數(shù)據(jù)更新時(shí)觸發(fā)java代碼的步驟如下:
1。編寫JAVA程序
public?class?Main?{??
public?static?void?modify(String?statTime)??
{??
String?datas?=?"/var/spool/cron/oracle";??
File?data?=?new?File(datas);??
StringBuffer?backup?=?null;??
try?{??
StringBuffer?content?=?new?StringBuffer();??
backup?=?new?StringBuffer();??
BufferedReader?san?=?new?BufferedReader(new?FileReader(data));??
String?line?=?null;??
while((line=san.readLine())!=null)??
{??
backup.append(line);??
backup.append("/n");??
}??
content.append("15?");??
content.append(statTime.trim());??
content.append("?*?*?*?/home/oracle/task.sh");??
content.append("/n");??
content.append("13?");??
content.append(statTime.trim());??
content.append("*?*?*?/home/oracle/tj_task/task2.sh");??
content.append("/n");??
FileWriter?writer?=?new?FileWriter(data,false);??
writer.write(content.toString());??
writer.flush();??
}?catch?(FileNotFoundException?e)?{??
e.printStackTrace();??
}?catch?(IOException?e)?{??
try??
{??
FileWriter?writer?=?new?FileWriter(data,false);??
writer.write(backup.toString());??
writer.flush();??
}catch(Exception?ex)??
{??
ex.printStackTrace();??
}??
}??
}??
}
注意,這里寫JAVA程序不需要遵循標(biāo)準(zhǔn)的JAVA程序,一定要有main入口函數(shù),相反,這里的函數(shù)一般不要取名為main,除非格式是標(biāo)準(zhǔn)的main 函數(shù)格式
2。把JAVA程序LOAD進(jìn)oracle
在$ORACLE_HOME/bin目錄下有個(gè)LOADJAVA命令,使用這個(gè)命令將剛寫好的JAVA程序LOAD進(jìn)數(shù)據(jù)庫。
loadjava -user?test/test@test?-o -v -f -r Main.java
如果成功的話,會(huì)打印出來信息提示成功,若程序有編譯錯(cuò)誤的話,也會(huì)提示錯(cuò)誤的地方。
3。修改權(quán)限
首先以管理員身份登錄進(jìn)數(shù)據(jù)庫
sqlplus / as sysdba
然后執(zhí)行
begin
dbms_java.grant_permission('TEST','SYS:java.io.FilePermission','/var/spool/cron/oracle','read,write,execute,delete');
end;
/
執(zhí)行完畢后,在數(shù)據(jù)庫里執(zhí)行上述JAVA程序時(shí),就擁有讀寫該文件的權(quán)限了。
4。創(chuàng)建存儲(chǔ)過程
進(jìn)入到數(shù)據(jù)庫,在SQLPLUS命令行
create or replace procedure Modify(name varchar2) as language java name 'Main.modify(java.lang.String)';
/
會(huì)提示創(chuàng)建存儲(chǔ)過程成功。
5。增加trigger
TOAD里直接針對某個(gè)表增加trigger,所以關(guān)鍵部分的代碼
begin
if :old.name = 'time' then
Modify(:new.value);
end if;
end;
實(shí)現(xiàn)方法請具體參照《Eclipse swt/Jface核心編程》
第21章 文本處理.
21.1 文本處理概述... 409
21.2 項(xiàng)目實(shí)戰(zhàn):JavaScript編輯器... 409
21.2.1 主窗口預(yù)覽... 409
21.2.2 項(xiàng)目文件結(jié)構(gòu)... 410
21.3 主窗口模塊... 411
21.3.1 代碼實(shí)現(xiàn)... 411
21.3.2 主窗口程序代碼分析... 414
21.3.3 啟動(dòng)主窗口程序... 416
21.4 代碼著色... 417
21.4.1 源代碼配置類(SourceViewerConfiguration)... 417
21.4.2 基于規(guī)則的代碼掃描器類(RuleBasedScanner)... 419
21.4.3 設(shè)置代碼掃描規(guī)則... 420
21.4.4 提取類(Token)和文本屬性類(TextAttribute)... 423
21.5 內(nèi)容輔助... 423
21.5.1 配置編輯器的內(nèi)容助手... 424
21.5.2 內(nèi)容輔助類... 424
21.5.3 輔助建議類(CompletionProposal)... 426
21.6 文檔的撤銷與重復(fù)... 427
21.6.1 文檔管理器對象(DefaultUndoManager)... 427
21.6.2 撤銷操作的實(shí)現(xiàn)... 427
21.6.3 恢復(fù)操作的實(shí)現(xiàn)... 428
21.7 查找與替換窗口... 429
21.7.1 窗口的界面設(shè)計(jì)... 429
21.7.2 查找功能的實(shí)現(xiàn)... 433
21.7.3 替換功能的實(shí)現(xiàn)... 434
21.8 首選項(xiàng)的對話框... 434
21.8.1 首選項(xiàng)頁面的代碼實(shí)現(xiàn)... 435
21.8.2 打開首選項(xiàng)頁面的代碼... 436
21.9 文件的打開、保存與打印... 437
21.9.1 打開文件... 437
21.9.2 保存文件... 437
21.9.3 打印文件... 438
21.10 幫助對話框... 439
21.11 其他的一些工具類... 440
21.11.1 事件管理類... 440
21.11.2 資源管理類... 441
21.11.3 程序中使用的常量... 443
21.12 本章小結(jié)... 444
分享標(biāo)題:觸發(fā)器java代碼實(shí)現(xiàn) 觸發(fā)器例子
分享網(wǎng)址:http://www.rwnh.cn/article18/hhggdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、面包屑導(dǎo)航、關(guān)鍵詞優(yōu)化、自適應(yīng)網(wǎng)站、標(biāo)簽優(yōu)化、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)