简体   繁体   English

如何使用 JdbcTemplate 从 Spring 创建存储的 function?

[英]How to create stored function from Spring using JdbcTemplate?

For administration needs, I need to create and replace stored procedures from Spring Repository.出于管理需要,我需要从 Spring 存储库创建和替换存储过程。 Has anyone already done this?有人已经这样做了吗?

I tried to use following code(unfinished):我尝试使用以下代码(未完成):

@Component
public class JdbcRepository {
    @Autowired
    private JdbcTemplate jdbc;

    public void checkConn(){

        jdbc.execute("create or replace package Z$CLIENT_INTERFACE_API as \n" +
                "    function CL_ORG_SEARCH_CREATE(p_request in clob) return clob;\n" +
                "end Z$CLIENT_INTERFACE_API;\n" +
                "/\n" +
                "create or replace package body Z$CLIENT_INTERFACE_API as\n" +
                "    function CL_ORG_SEARCH_CREATE(p_request in clob) return clob\n" +
                "    is\n" +
                "        content_xml VARCHAR2(4000);\n" +
                "        p Dbms_Xmlparser.Parser;\n" +
                "        v_Doc Dbms_Xmldom.Domdocument;\n" +
                "        v_Root_Element Dbms_Xmldom.Domelement;\n" +
                "        v_Child_Nodes Dbms_Xmldom.Domnodelist;\n" +
                "        v_Child_Node Dbms_Xmldom.Domnode;\n" +
                "        v_Message_Id VARCHAR2(36);\n" +
                "        v_First_Char VARCHAR2(1);\n" +
                "    begin\n" +
                "        content_xml:=  CAST(p_request as VARCHAR2);\n" +
                "        p := Dbms_Xmlparser.Newparser;\n" +
                "        dbms_xmlparser.setvalidationmode(p,False);\n" +
                "        dbms_xmlparser.parsebuffer(p,content_xml);\n" +
                "        v_Doc := dbms_xmlparser.getdocument(p);\n" +
                "        v_Root_Element := Dbms_Xmldom.getdocumentelement(v_Doc);\n" +
                "        return 'aaaaaaaaaaaaaaaaaaaaaaaaaa1';\n" +
                "    end;\n" +
                "end Z$CLIENT_INTERFACE_API;\n" +
                "/");
    }

}

But whan I execute it, i take broken package in db.但是当我执行它时,我在数据库中使用了损坏的 package。 In same time, whan I run this from SQLDeveloper - all works perfect.同时,当我从 SQLDeveloper 运行它时 - 一切都很完美。

You are separating statements by both semicolon ;您用两个分号分隔语句; and slash / .和斜线/ Try using only one of those, but not both.尝试只使用其中之一,但不要同时使用两者。 If that doesn't work either, try executing each statement separately with execute( )如果这也不起作用,请尝试使用execute( )分别执行每个语句

This works perfect:这很完美:

        jdbc.execute("create or replace package Z$CLIENT_INTERFACE_API as \n" +
                "    function CL_ORG_SEARCH_CREATE(p_request in clob) return clob;\n" +
                "end Z$CLIENT_INTERFACE_API;\n");
        jdbc.execute("create or replace package body Z$CLIENT_INTERFACE_API as\n" +
                        "    function CL_ORG_SEARCH_CREATE(p_request in clob) return clob\n" +
                        "    is\n" +
                        "        content_xml VARCHAR2(4000);\n" +
                        "        p Dbms_Xmlparser.Parser;\n" +
                        "        v_Doc Dbms_Xmldom.Domdocument;\n" +
                        "        v_Root_Element Dbms_Xmldom.Domelement;\n" +
                        "        v_Child_Nodes Dbms_Xmldom.Domnodelist;\n" +
                        "        v_Child_Node Dbms_Xmldom.Domnode;\n" +
                        "        v_Message_Id VARCHAR2(36);\n" +
                        "        v_First_Char VARCHAR2(1);\n" +
                        "    begin\n" +
                        "        content_xml:=  CAST(p_request as VARCHAR2);\n" +
                        "        p := Dbms_Xmlparser.Newparser;\n" +
                        "        dbms_xmlparser.setvalidationmode(p,False);\n" +
                        "        dbms_xmlparser.parsebuffer(p,content_xml);\n" +
                        "        v_Doc := dbms_xmlparser.getdocument(p);\n" +
                        "        v_Root_Element := Dbms_Xmldom.getdocumentelement(v_Doc);\n" +
                        "        return 'aaaaaaaaaaaaaaaaaaaaaaaaaa1';\n" +
                        "    end;\n" +
                        "end Z$CLIENT_INTERFACE_API;");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM