Oracle Java存储过程返回数据

时间:2014-01-31 16:47:07

标签: java oracle stored-procedures java-stored-procedures

我正在尝试编写一个可以返回结果的 Java存储过程。我在Oracle网站上找到了这个doc,但没有提供返回数据的例子 http://docs.oracle.com/cd/B19306_01/java.102/b14187/cheight.htm#CHDJJDGH

我创建了包如下:

CREATE OR REPLACE PACKAGE test_proc AS 
FUNCTION hello_world RETURN VARCHAR2;
PROCEDURE insert_test(CHAINE VARCHAR2, NOMBRE NUMBER);
END test_proc;

包体如下

CREATE OR REPLACE PACKAGE BODY test_proc AS
FUNCTION hello_world RETURN VARCHAR2 AS LANGUAGE JAVA
NAME 'TestProc.helloWorld() return java.lang.String';
PROCEDURE insert_test(CHAINE VARCHAR2, NOMBRE NUMBER) AS LANGUAGE JAVA
NAME 'TestProc.insertTEST(java.lang.String, int)';
END test_proc;

和Java代码

public class TestProc {

public static void insertTEST(String chaine, int nombre) 
{
    System.out.println("Insert into test...");
    String sql = "INSERT INTO TEST VALUES(?,?)";
    try
    {
        Connection conn = DriverManager.getConnection("jdbc:default:connection:");
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, chaine);
        pstmt.setInt(2, nombre);
        pstmt.executeUpdate();
    }
    catch (SQLException e)
    {
        System.err.println(e.getMessage());     
    }
}

public static String helloWorld() 
{
    return "Hello world!!";
 }
}

我使用SQLDeveloper使用以下指令调用我的程序

CALL test_proc.insert_test('test',1); #work
CALL test_proc.hello_world(); #doesn't work

执行第二条指令时出现以下错误 ORA-06576:不是有效的功能或程序名称

你知道如何解决这个问题吗?或者您知道在哪里可以找到在Oracle数据库中返回数据的java存储过程的工作示例吗?

最后使用以下命令获得结果:

select test_proc.hello_world() from dual;

结果:

TEST_PROC.HELLO_WORLD()                                                              
-------------------------------------------------------------------------------------
Hello World!!
1 rows selected

你知道如何从多行数据库中返回复杂的结果吗?

1 个答案:

答案 0 :(得分:1)

对于返回某些内容的PL / SQL函数,您无法在PL / SQL中调用它,就像它是一个过程一样。将其称为功能。尝试

var test VARCHAR2(30)
CALL test_proc.hello_world() INTO :test;
print test

TEST
------------------------------------------
Hello world!!