写一个after update的trigger,再写一个存储过程,trigger调用存储过程,存储过程调用java程序。 ----------------------------建立一个java存储过程 1. 先看一下这个目录 [oracle@ocean ~]$ pwd /home/oracle [oracle@ocean ~]$ ls -l total 8 -rw-r--r-- 1 oracle orains 604 Dec 26 2006 bash 2. 连接到test用户 SQL> conn test/test Connected. 3. 授于test用户文件读写和执行命令的权限 SQL>exec dbms_java.grant_permission('TEST','SYS:java.io.FilePermission','<<ALL FILES>>','read,write,execute,delete'); PL/SQL procedure successfully completed. SQL>exec dbms_java.grant_permission('TEST','java.lang.RuntimePermission','*','writeFileDescriptor' ); PL/SQL procedure successfully completed. 4. 建立java存储过程,注意,这里的exp 路径和dmp文件的路径是数据库服务器的路径 create or replace and compile java source named "aa" as import java.io.*; import java.lang.*; import java.util.*; import java.sql.*; import oracle.sql.*; public class aa { public static void invoke_exe() throws IOException { Process p=Runtime.getRuntime().exec("/oracle/product/9.2.4/bin/exp userid=test/test file=/home/oracle/test.dmp"); try { p.waitFor(); }catch(InterruptedException ie){System.out.println(ie);} } } / Java created. Elapsed: 00:00:00.01 5. 建立调用java存储过程的存储过程call_aa create or replace procedure call_aa as language java name 'aa.invoke_exe()'; / 6. 执行java存储过程 exec call_aa; 7. 检查一下dmp文件是否已经生成 [oracle@ocean ~]$ pwd /home/oracle [oracle@ocean ~]$ ls -l total 28 -rw-r--r-- 1 oracle orains 604 Dec 26 2006 bash -rw-r--r-- 1 oracle orains 16384 Jul 3 14:12 test.dmp ----------------- exec dbms_Java.Grant_Permission('TEST', 'java.io.FilePermission', '<<ALL FILE>>', 'read ,write, execute, delete'); exec dbms_Java.Grant_Permission('TEST', 'java.io.FilePermission', 'd:aa.bat', 'read ,write, execute, delete'); exec dbms_java.grant_permission('TEST','java.lang.RuntimePermission','*','writeFileDescriptor' );
追问:
5. 建立调用java存储过程的存储过程call_aa create or replace procedure call_aa as language java name 'aa.invoke_exe()'; / 这些代码应该写在java里面还是写数据库那边,完全没有一个思路,请指点下。不知道这样写,这样写整体的性能怎么样? 能解释下下面的代码吗? [oracle@ocean ~]$ pwd //这里是指 oracle实例吗? /home/oracle [oracle@ocean ~]$ ls -l //还有这句是干嘛用的? total 28 //这里指什么?
追答:
1、在Oracle中建立存储过程 2、[oracle@ocean ~] ---这是Oracle用户 su - oracle 切换用户 3、pwd 查看当前路径 4、ls -l 查看当前路径下文件 5、total 28 是执行ls -l 后返回的值 不用理会