簡體   English   中英

將Java文件更改為存儲過程

[英]Changing Java file to Stored procedure

我有一個Java文件名E2BXmlParser ,用於讀取和處理從數據庫中獲取的XML數據。

現在,在像這樣更改文件后,我嘗試使用Oracle SQL Developer執行Java文件

CREATE AND COMPILE JAVA SOURCE NAMED "E2BXmlParser" AS

--(Rest of Code).

其余的代碼看起來像這樣-

import oracle.jdbc.*
import oracle.xdb.XMLType;
import oracle.xml.parser.v2.XMLDocument;
import oracle.jdbc.*;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.*;
import java.sql.Connection;
import java.util.*
import javax.xml.xpath.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.io.StringReader;

class Reaction {

}

public class E2BXmlParser {

   //variables

    public E2BXmlParser(int regReportId, int reportId) {
       //connection
    }
    public static void parseXML(int regReportId, int reportId, int isBlinded, int reportFormid,int pi_is_r3_profile,int pi_max_length,String pi_risk_category) throws SQLException, XPathExpressionException, TransformerException {
        //fetching data
    }
    private static Document getDocumentFromString(String xmlContent) throws Exception {

    }

    private String getStringByElementName(String tagName, Element element) {

    }
    private OracleConnection getConnecton() {
       //oracle connection

    }
private Document getXmlDocumentFromDb(int regReportId, int reportId) {
    //fetching and manipulating data
}
private List<Reaction> getReactionIds() {
    //logic 
}
private void findById(Reaction reaction, String id) {

    //xpath for finding nodes

}
private boolean checkNodeExists(Element el, String nodeName) {
    NodeList list = el.getElementsByTagName(nodeName);
    return list.getLength() > 0;
}
private void updateNode(Reaction reaction, Element el) {

  //update xml

}
private void updateXmlInDB(int regReportId, int reportId) throws SQLException {
    //update xml in db
}

private void updateDrugNode() {
    Element rootElement = document.getDocumentElement();
    //logic
}

private void updateDrugEventandDrugRelatedness(int reportFormid) {
    //update xml 

}

private void updateMedicinalActiveSubstance(int regReportId, int isBlinded, int reportFormid,int pi_is_r3_profile,int pi_max_length,String pi_risk_category) {

   //update xml after fetching data and changing in DB
}

private Boolean compareStrings(String strOne, String strTwo) {

    //logic
}

private void updateDosageInformation() {
   //logic
}

private void updateActiveSubstanceName() {

   updating activesubstance using xpath 

}

private void RemoveDuplicateActiveSubstance(NodeList activesubstancenameList, List<String> names) {

// logic
     }
}

現在,它要求在代碼中使用多個值(反應,節點列表,節點)。

但是,當我從這樣的命令行執行java文件時,情況並非如此

loadjava -user  username/password@DBalias -r E2BXmlParser.java

PS 我必須將我的E2BXmlParser.java文件更改為E2BXmlParser.sql文件,以便可以從oracle sql developer執行它。

請幫忙。

最簡單的解決方案是將類的所有邏輯包裝到類中的一個靜態方法中。 接下來,您必須將此方法發布到pl sql。

靜態功能的發布將(或多或少)像這樣。

CREATE PROCEDURE parseXML (regReportId NUMBER, reportId NUMBER, isBlinded NUMBER, reportFormid NUMBER, pi_is_r3_profile NUMBER, pi_max_length NUMBER, pi_risk_category varchar2)
AS LANGUAGE JAVA
NAME 'E2BXmlParser.parseXML(int regReportId, int reportId, int isBlinded, int reportFormid,int pi_is_r3_profile,int pi_max_length,java.lang.String pi_risk_category)';

注意。 在PLSQL你必須使用完整路徑,例如對象的String - > java.lang.String

當然,oracle允許以更多面向對象的方式使用java類,但這更加復雜。

有關更多信息,請參閱本手冊。 https://docs.oracle.com/cd/E18283_01/java.112/e10588/toc.htm

第3章(在Oracle數據庫中調用Java方法)-有關基本解決方案。
第6章(發布具有調用規范的Java類)-(編寫對象類型調用規范的段落)-用於發布完整的Java類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM