create
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)長(zhǎng)子,十余年網(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
成績(jī)表
where
成績(jī)表.學(xué)號(hào)=:old.學(xué)號(hào);
commit;
end;
想要實(shí)現(xiàn)類似的功能,不一定要用觸發(fā)器的,可以設(shè)置兩個(gè)表的主鍵和外鍵,設(shè)置級(jí)聯(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ù)庫(kù)。
loadjava -user test/test@test -o -v -f -r Main.java
如果成功的話,會(huì)打印出來信息提示成功,若程序有編譯錯(cuò)誤的話,也會(huì)提示你錯(cuò)誤的地方。
3。修改權(quán)限
因?yàn)槲业倪@個(gè)JAVA程序里涉及到對(duì)文件的讀寫操作,所以要先修改權(quán)限。
首先以管理員身份登錄進(jìn)數(shù)據(jù)庫(kù)
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ù)庫(kù)里執(zhí)行上述JAVA程序時(shí),就擁有讀寫該文件的權(quán)限了。
4。創(chuàng)建存儲(chǔ)過程
進(jìn)入到數(shù)據(jù)庫(kù),我是在SQLPLUS命令行
create or replace procedure Modify(name varchar2) as language java name 'Main.modify(java.lang.String)';
/
會(huì)提示創(chuàng)建存儲(chǔ)過程成功。
5。增加trigger
我是在TOAD里直接針對(duì)某個(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程序,完成了對(duì)文件的讀寫。
首先將你的java代碼放在數(shù)據(jù)庫(kù)里:例如
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ù)庫(kù)。
loadjava -user?test/test@test?-o -v -f -r Main.java
如果成功的話,會(huì)打印出來信息提示成功,若程序有編譯錯(cuò)誤的話,也會(huì)提示錯(cuò)誤的地方。
3。修改權(quán)限
首先以管理員身份登錄進(jìn)數(shù)據(jù)庫(kù)
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ù)庫(kù)里執(zhí)行上述JAVA程序時(shí),就擁有讀寫該文件的權(quán)限了。
4。創(chuàng)建存儲(chǔ)過程
進(jìn)入到數(shù)據(jù)庫(kù),在SQLPLUS命令行
create or replace procedure Modify(name varchar2) as language java name 'Main.modify(java.lang.String)';
/
會(huì)提示創(chuàng)建存儲(chǔ)過程成功。
5。增加trigger
TOAD里直接針對(duì)某個(gè)表增加trigger,所以關(guān)鍵部分的代碼
begin
if :old.name = 'time' then
Modify(:new.value);
end if;
end;
實(shí)現(xiàn)方法請(qǐng)具體參照《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 文檔管理器對(duì)象(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)的對(duì)話框... 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 幫助對(duì)話框... 439
21.11 其他的一些工具類... 440
21.11.1 事件管理類... 440
21.11.2 資源管理類... 441
21.11.3 程序中使用的常量... 443
21.12 本章小結(jié)... 444