从Java创建并将SYS_REFCURSOR作为输入参数传递给Oracle过程 [英] Create and pass SYS_REFCURSOR as an input parameter to Oracle procedure from Java

查看:163
本文介绍了从Java创建并将SYS_REFCURSOR作为输入参数传递给Oracle过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须与具有SYS_REFCURSOR作为输入参数的外部Oracle过程进行通信:

I have to communicate with an external Oracle procedure that has a SYS_REFCURSOR as an input parameter:


过程merge_objects(varchar2中的p_table_name,
varchar2中的p_id_array,SYS_REFCURSOR中的p_cur_data)

procedure merge_objects(p_table_name in varchar2, p_id_array in varchar2, p_cur_data in SYS_REFCURSOR)

我需要根据我的数据传递SYS_REFCURSOR参数从客户收到。有没有办法在Java中创建这样的参数?

I need to pass SYS_REFCURSOR parameter based on the data that I receive from a client. Is there any way to create such parameter in Java?

推荐答案

直接从Java传递SYS_REFCURSOR的解决方案存在。无需在数据库中插入数据。

The solution to pass SYS_REFCURSOR from Java directly DOES exist. Without the need to insert data in database.

以下语句在Oracle中生成SYS_REFCURSOR(示例包含值和列名称):

The following statement generates SYS_REFCURSOR in Oracle (example with values and column names):


OPEN cur_data FOR select'000000 inn,'ch'lastname from dual;

OPEN cur_data FOR select '000000' inn, 'Ch' lastname from dual;

现在我将展示如何实现这一点。这是代码的测试工作示例。过程 merge_objects 将SYS_REFCURSOR作为第三个输入参数。 Oracle的示例:

Now I will show how to implement this. Here is a test working example of code. The procedure merge_objects has SYS_REFCURSOR as a third input param. The example for Oracle:

public static void main(String[] args) {
    try {

         Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@...", "username", "password");

         String plsql =
                        "declare cur_data SYS_REFCURSOR;\n" +
                        "BEGIN\n" +
                        "OPEN cur_data FOR select '000000' inn, 'Ch' lastname from dual;\n" +
                        "END;\n" +
                        "merge_objects('tbl_o_persons',\n" +
                        "                '19863572,19863598',\n" +
                        "                cur_data);\n" +
                        "CLOSE cur_data;\n" +
                        "end;";

        try (PreparedStatement stmt = conn.prepareStatement(plsql)) {
            stmt.execute();
        }

        conn.close();

    }catch(Exception ex){
        System.out.println("Error: " + ex.toString());
    }
}

因此根据您的数据,您可以使用OPEN修改字符串声明,包括你的数据,所以直接从Java传递CURSOR到neccesary程序。

So based on your data you can modify string with OPEN statement, include your data and so pass CURSOR to neccesary procedure directly from Java.

这篇关于从Java创建并将SYS_REFCURSOR作为输入参数传递给Oracle过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆