2016-12-05 37 views
1

我有一个只包含Java代码的过程的PL/SQL文件。在PL/SQL中重写java代码的挑战

以下是声明的Java代码开始前:

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "fnd_log_file_handler" AS 

该Java代码来执行各种文件操作(复制,检查长度,迭代文件的数组,检查是否一个文件对象是一个目录,等等)和DOM操作/ XML解析(从给定的XML字符串创建XML文档对象)。此外,它还使用返回Process对象的Runtime.exec()java方法调用外部命令。以下是进口包装:

import java.nio.channels.FileChannel; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

还有一种方法会被重复调用。它返回与特定名称模式匹配的文件夹中的文件列表。它使用比较器来过滤结果。以下是代码片段

/** 
    * This API returns list of files in a folder matching particular name pattern. 
    * @param path - Path to the directory to get list of files 
    * @param pattern - Pattern for file names to look for. All files with name 
    * starting with this pattern will be returned from the API 
    * @return - Sorted list of files. 
    */ 

    private static File[ ] listFilesInOrder (String path, String pattern, 
             Comparator <File> compareFunc) 
    { 
     BASEFILENAME = pattern; 
     File lFile = new File (path); 

     File[] arrayFileList = lFile.listFiles(new FilenameFilter() { 
      public boolean accept(File f, String s) { return s.startsWith(BASEFILENAME + INDEX_SPERATOR); } 
     }); 


     if(arrayFileList!=null) 
     { 
     Arrays.sort(arrayFileList, compareFunc); 

     } 

     return arrayFileList; 
    } 

我期待在将来从数据库中删除JVM的情况下删除Java依赖项。是否可以编写PL/SQL代码来包含所有这些逻辑?如果不是,我的其他选择是什么?任何反馈意见。

+0

如果将来JVM从数据库中被删除? – Kayaman

+0

@Kayaman Java是Oracle数据库中的一个可选组件,不幸的是,DBA不再需要删除它。这很愚蠢,但它发生了,所以尽可能避免Java依赖是明智的做法。 –

+0

@JonHeller对于这样的情况,是否有解决方法?此代码是否仍然可以作为独立的Java文件存在,可以从DB中调用?我不确定在PL/SQL中翻译所有这些逻辑是否可行。 – Pha3drus

回答

0

是的,它可能在PL/SQL中。要使用文件系统中的文件,您需要查看Oralce UTL_FILE包,请参阅:Oracle UTL_FILE documentation

要在java中使用类似的列表,可以在PL/SQL代码中使用您的自定义TYPE和TABLE类型。

PL/SQL功能强大,足以完成这样的逻辑

+0

我熟悉URL_FILE包。有没有办法调用外部应用程序和DOM操作? – Pha3drus

+0

当然,只要Oracle具有XPath/XQuery功能,就可以调用外部应用程序和XML操作。对不起,现在我离PL/SQL太远,不知道如何......你可以通过文档来挖掘。它不隐藏太浸...好运:) – Vadim