在PL/SQL中重写java代码的挑战

在PL/SQL中重写java代码的挑战,java,oracle,plsql,Java,Oracle,Plsql,我有一个PL/SQL文件,其中的过程只包含Java代码 以下是Java代码开始之前的声明: CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "fnd_log_file_handler" AS 此Java代码执行各种文件操作(复制、检查长度、迭代文件数组、检查文件对象是否为目录等)和DOM操作/XML解析(从给定的XML字符串创建XML文档对象)。此外,它还使用返回流程对象的Runtime.exec()java方法调用外部命令。以下是导入的包: i

我有一个PL/SQL文件,其中的过程只包含Java代码

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

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "fnd_log_file_handler" AS
此Java代码执行各种文件操作(复制、检查长度、迭代文件数组、检查文件对象是否为目录等)和DOM操作/XML解析(从给定的XML字符串创建XML文档对象)。此外,它还使用返回流程对象的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;
  }
/**
*此API返回文件夹中与特定名称模式匹配的文件列表。
*@param path-获取文件列表的目录路径
*@param pattern-要查找的文件名的模式。名称为的所有文件
*从该模式开始,将从API返回
*@return-已排序的文件列表。
*/
私有静态文件[]列表文件顺序(字符串路径、字符串模式、,
比较器(比较器)
{
BASEFILENAME=模式;
File lFile=新文件(路径);
文件[]arrayFileList=lFile.listFiles(新文件名筛选器(){
公共布尔接受(文件f,字符串s){返回s.startsWith(BASEFILENAME+INDEX_SPERATOR);}
});
if(arrayFileList!=null)
{
sort(arrayFileList,compareFunc);
}
返回数组文件列表;
}

我希望删除java依赖项,以防将来JVM从数据库中删除。是否可以编写PL/SQL代码来包含所有这些逻辑?如果没有,我的其他选择是什么?任何反馈都将不胜感激

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

为了在java中类似地处理列表,可以在PL/SQL代码中使用自定义类型和该类型的表


PL/SQL强大到足以执行这种逻辑

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

为了在java中类似地处理列表,可以在PL/SQL代码中使用自定义类型和该类型的表


PL/SQL强大到足以执行这样的逻辑

,以防将来从数据库中删除JVM?@Kayaman Java是Oracle数据库中的可选组件,不幸的是,DBA删除它是很常见的。这很愚蠢,但确实发生了,所以在可能的情况下尽量避免Java依赖是明智的。@JonHeller对于这种情况有解决办法吗?该代码是否仍然可以作为独立的Java文件存在,并且可以从DB中调用?我不确定在PL/SQL中翻译所有这些逻辑是否可行。如果将来JVM从数据库中删除?@Kayaman Java是Oracle数据库中的可选组件,不幸的是,DBA删除它是很常见的。这很愚蠢,但确实发生了,所以在可能的情况下尽量避免Java依赖是明智的。@JonHeller对于这种情况有解决办法吗?该代码是否仍然可以作为独立的Java文件存在,并且可以从DB中调用?我不确定用PL/SQL翻译所有这些逻辑是否可行。我熟悉URL_文件包。有没有一种方法可以调用外部应用程序和DOM操作?只要Oracle具有XPath/XQuery功能,肯定可以调用外部应用程序和XML操作。抱歉,现在我离PL/SQL太远了,无法确切地告诉您如何。。。您只需翻阅文档即可。它不是隐藏太深。。。祝你好运:)我熟悉URL_文件包。有没有一种方法可以调用外部应用程序和DOM操作?只要Oracle具有XPath/XQuery功能,肯定可以调用外部应用程序和XML操作。抱歉,现在我离PL/SQL太远了,无法确切地告诉您如何。。。您只需翻阅文档即可。它不是隐藏太深。。。祝你好运:)