在 PL/SQL 中重写 java 代码的挑战
Posted
技术标签:
【中文标题】在 PL/SQL 中重写 java 代码的挑战【英文标题】:Challenges in Rewriting java code in PL/SQL 【发布时间】:2016-12-05 22:17:57 【问题描述】:我有一个 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;
还有一种方法被重复调用。它返回与特定名称模式匹配的文件夹中的文件列表。它使用 Comparator 过滤结果。以下是代码摘录
/**
* 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;
我希望删除 java 依赖项,以防 JVM 将来从数据库中删除。是否可以编写 PL/SQL 代码来包含所有这些逻辑?如果没有,我的其他选择是什么?任何反馈表示赞赏。
【问题讨论】:
万一JVM将来从数据库中删除? @Kayaman Java 是 Oracle 数据库中的一个可选组件,不幸的是,DBA 删除它并不常见。这很愚蠢,但它确实发生了,因此明智的做法是尽可能避免 Java 依赖。 @JonHeller 是否有解决这种情况的方法?此代码是否仍可以作为可以从数据库中调用的独立 Java 文件存在?我不确定在 PL/SQL 中翻译所有这些逻辑是否可行。 【参考方案1】:是的,在 PL/SQL 中是可能的。要使用文件系统中的文件,您需要查看 Oralce UTL_FILE 包,请参阅:Oracle UTL_FILE documentation
要在 java 中与列表类似地工作,您可以在 PL/SQL 代码中使用您的自定义 TYPE 和该 TYPE 的 TABLE。
PL/SQL 足够强大,可以做这样的逻辑
【讨论】:
我对 URL_FILE 包很熟悉。有没有办法调用外部应用程序和 DOM 操作? 只要 Oracle 具有 XPath/XQuery 能力,当然可以调用外部应用程序和 XML 操作。抱歉,现在我离 PL/SQL 太远了,无法准确地告诉你如何......你可以通过文档来挖掘。它没有隐藏太浸......祝你好运:)以上是关于在 PL/SQL 中重写 java 代码的挑战的主要内容,如果未能解决你的问题,请参考以下文章
在 oracle apex 中将 sql 查询重写为 pl/sql
Java面试宝典常用类中的方法重写|equals方法与逻辑运算符==的区别
如何在一组行之后或有条件地在没有 PL/SQL 块的情况下增加 oracle 序列?